ChatGPT解决这个技术问题 Extra ChatGPT

获取附加到 Eclipse 的源 jar 文件以获取 Maven 管理的依赖项

我正在使用 Maven(和 Maven Eclipse 集成)来管理我在 Eclipse 中的 Java 项目的依赖关系。从 Maven 存储库自动下载 JAR 文件的功能可以节省实时时间。不幸的是,它不包括 API 文档和源代码。

如何设置 Maven 以自动获取源和 javadoc 附件并使用 Eclipse 正确注册它们?

询问如何在使用 maven 时始终下载源代码和 javadoc 的相关问题:stackoverflow.com/questions/5780758/…

S
Sathiamoorthy

我确信 Eclipse 的 m2eclipse Maven 插件 - 反过来 - 可以做到这一点。您可以将其配置为自动为您下载源文件和 javadoc。

这是通过进入 Window > Preferences > Maven and checking the "Download Artifact Sources" and "Download Artifact JavaDoc" 选项来实现的。

https://i.stack.imgur.com/CNUBh.png


是的,我刚开始使用 m2eclipse,它确实占用了这个(以及许多其他的东西 maven)。
这些回复都不是答案。为什么他们被投票?我可以通过在导航器视图中控制单击项目并选择“m2 Maven”->“下载源”来下载源。然后,我可以在类上单击命令(mac)以导航到链接的源。
似乎如果编译的 JAR 已经下载,Eclipse 不会立即尝试获取源/Javadoc JAR。似乎修改包含对我想要在 Eclipse 中的源/Javadoc 的 POM 的依赖项的 POM 并保存 POM 会下载依赖项的源/Javadoc,即使编译的 JAR 已经在 Maven 存储库缓存中。
@Francis - 进行上述更改后,右键单击您的项目并选择“Maven > Update Project ...”这将导致您的源 jar 下载。
除了下载所有依赖项的源之外,是否可以通过在 pom 中指定它以及依赖项本身来下载某些依赖项,可以通过依赖项标记中的一些内部标记或类似的东西来下载?
S
Stephen Denne
mvn eclipse:eclipse -DdownloadSources=true

或者

mvn eclipse:eclipse -DdownloadJavadocs=true

或者您可以添加两个标志,正如 Spencer K 指出的那样。

此外,=true 部分不是必需的,因此您可以使用

mvn eclipse:eclipse -DdownloadSources -DdownloadJavadocs

或两者! mvn eclipse:eclipse -DdownloadSources=true -DdownloadJavadocs=true 仅当源代码和 javadocs 提供给您从中下载的存储库时才有效。有时它们不像 Spring 那样提供。
Spring 现在确实提供了它们。
请注意,这个答案已有 10 多年的历史。在 eclipse 中使用 m2e 插件,而不是让 maven 创建 eclipse 配置文件。
o
overthink

关于这项工作的其他答案,但如果你想避免记住命令行参数,你也可以添加到 downloadSources 和 downloadJavadocs 配置到你的 pom.xml 的 maven-eclipse-plugin 部分:

<project>
    ...
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-eclipse-plugin</artifactId>
                <configuration>
                    <downloadSources>true</downloadSources>
                    <downloadJavadocs>true</downloadJavadocs>
                    ... other stuff ...
                </configuration>
            </plugin>
        </plugins>
    </build>
    ...
</project>

我可以将其设置为每个依赖项级别吗?
@marcorossi对不起,我不确定这是否可能。
我不相信这是合适的。源代码和 Javadoc 下载设置肯定是用户偏好,而不是项目级别的问题?有关如何将其放入 settings.xml 文件的信息,请参阅 my answer below
我收到了这个警告:[WARNING] 'build.plugins.plugin.version' for org.apache.maven.plugins:maven-eclipse-plugin is missing。要解决这个问题,您可以在 下添加类似这样的内容:2.9
D
Duncan Jones

我不希望将源代码/Javadoc 下载设置放入项目 pom.xml 文件中,因为我觉得这些是用户首选项,而不是项目属性。相反,我将它们放在我的 settings.xml 文件中的配置文件中:

<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">

  <profiles>
    <profile>
      <id>sources-and-javadocs</id>
      <properties>
        <downloadSources>true</downloadSources>
        <downloadJavadocs>true</downloadJavadocs>
      </properties>
    </profile>
  </profiles>

  <activeProfiles>
    <activeProfile>sources-and-javadocs</activeProfile>
  </activeProfiles>
</settings>

我在 .m2 中复制了这个 settings.xml,但是没有复制源代码和 javadocs。尽管 CLI 上的以下命令显式带来了源代码和 javadocs: mvn dependency:sources dependency:resolve -Dclassifier=javadoc 有什么想法吗?
也许这可行,但请解释一下,maven eclipse 插件应该如何找到这些配置设置?你认为它寻找全局属性?
S
Sathiamoorthy

右键单击 project -> maven -> download sources


每个人都说如何启用它而不是如何让 maven 下载源代码!启用选项后
H
Hardy

如果源 jar 在本地存储库中并且您使用的是 Eclipses maven 支持,则源会自动附加。您可以运行 mvn dependency:sources 下载给定项目的所有源 jar。不知道如何对文档做同样的事情。


这对我有用。运行 mvn dependency:sources 后,我可以在 Eclipse 中单击以读取源代码。无需使用 m2e 进行额外的处理。要下载 javadocs,请执行 mvn dependency:sources -Dclassifier=javadoc
S
Sathiamoorthy

如果你使用 meclipse 做

window --> maven --> Download Artifact Sources (select check)

(如果您仍然获得附加源窗口,则单击附加文件按钮并关闭附加源窗口。下次您尝试查看源时,它将打开正确的源)


C
Community

还有一个 similiar question 可以回答这个问题并包含示例 pom 设置。


S
Sathiamoorthy

我尝试了windows->pref..->Maven,但没有成功。因此,我使用命令 mvn eclipse:eclipse -DdownloadSources=true 创建了一个新的类路径,并刷新了一次工作区。瞧……附上来源。

源 jar 的条目在类路径中可用。因此,新版本解决了问题...


使用您的解决方案,我可以选择要获取源的模块。只需 cd 进入该模块并使用“mvn eclipse:clean eclipse:eclipse -DdownloadSources=true -T4 -Dmaven.test.skip=true -Denforcer.skip=true”构建。谢谢 :)
S
Sathiamoorthy

在我的带有 m2Eclipse 的 Eclipse helios 版本中,没有

window --> maven --> Download Artifact Sources (select check)

窗口下只有“新窗口”、“新编辑器”、“打开透视图”等。

如果您右键单击您的项目,然后选择 maven--> download sources

什么都没发生。没有下载源,没有更新 pom 文件,没有弹出窗口询问哪些源。

在 eclipse 之外执行 mvn xxx 是危险的 - 某些命令不适用于 m2ecilpse - 我这样做了一次并且丢失了整个项目,不得不重新安装 eclipse 并从头开始。

我仍在寻找一种方法来让 ecilpse 和 maven 找到和使用像 servlet-api 这样的外部 jar 的来源。


b
bnguyen82

将 maven-eclipse-plugin 的 pom 更改为包含 source/javadoc 只需申请添加到 pom 的新依赖项。如果我们需要申请现有的依赖,我们必须运行 mvn dependency:sources。我检查了这个。


u
user17417

在 Eclipse-Maven 首选项中检查下载源/javadoc,有时是不够的。如果 maven 由于某种原因(网络中断?)无法下载它们,maven 会创建一些 *.lastUpdated 文件,然后永远不会再次下载。我的经验解决方案是从 .m2/repository 中删除工件目录,然后重新启动 eclipse 工作区,检查下载源/javadoc 并检查启动时更新项目。重新启动工作区后,可能有些项目会被标记为错误,而 eclipse 进度正在下载,那么任何错误都会被清除。也许这个程序不是那么“科学”,但对我来说确实成功了。


u
unique72

我已将 pom 配置添加到 maven-eclipse 插件以下载源代码和 javadocs,但我认为/希望这会发生在新的依赖项上,而不是现有的依赖项。

对于现有依赖项,我在包资源管理器中浏览到“Maven Dependencies”并右键单击 commons-lang-2.5.jar,选择 Maven |下载源和......似乎没有发生任何事情(没有进度条或指示它正在做任何事情)。但是,它确实下载了,因为我现在可以跳转到 commons-lang 中的源代码。


j
jhohlfeld

overthink 建议使用 pom 中的设置:

<project>
...
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-eclipse-plugin</artifactId>
            <configuration>
                <downloadSources>true</downloadSources>
                <downloadJavadocs>true</downloadJavadocs>
                ... other stuff ...
            </configuration>
        </plugin>
    </plgins>
</build>
...

首先,我认为这仍然不会附加 javadoc 和源(因为我之前尝试使用 -DdownloadSources 选项失败)。

但令人惊讶的是 - 使用 POM 变体时,.classpath 文件正在获取其源代码和 javadoc!


S
Sathiamoorthy

对于 Indigo(可能还有 Helios),上面提到的复选框位于此处:

Window -> Preferences -> Maven

D
Dan R.

我遇到了类似的问题,最适合我的解决方案是将源代码包含在与编译代码相同的 jar 中(因此 jar 中的给定目录将同时包含 Foo.javaFoo.class)。 Eclipse 自动将源代码与编译后的代码相关联,并自动从源代码中提供 JavaDoc。显然,这只有在您控制工件时才有用。


a
arkabhi

在项目级别或用户属性级别设置属性后,请执行 Maven -> 更新项目(强制更新)。它下载源


B
Bhaskara Arani

对答案的一个小补充,如果您的项目不是 maven 项目,您仍然可以通过使用 eclipse Java Source Attacher 中提供的这个插件来获取 jar 的源代码