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

Posted

技术标签:

【中文标题】获取附加到 Eclipse 的源 jar 文件以获取 Maven 管理的依赖项【英文标题】:Get source jar files attached to Eclipse for Maven-managed dependencies 【发布时间】:2010-09-23 13:38:00 【问题描述】:

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

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

【问题讨论】:

使用 maven 时如何始终下载源代码和 javadoc 的相关问题:***.com/questions/5780758/… 【参考方案1】:

对于 Indigo(可能还有 Helios),上述复选框位于此处:

Window -> Preferences -> Maven

【讨论】:

【参考方案2】:

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

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

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

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

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

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

我仍在寻找一种方法来让 ecilpse 和 maven 找到并使用外部 jar 的来源,例如 servlet-api。

【讨论】:

【参考方案3】:

我尝试了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”构建。谢谢:)【参考方案4】:

如果你使用 meclipse 做

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

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

【讨论】:

【参考方案5】:

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

【讨论】:

大家说的是如何启用它而不是如何让maven下载源代码!启用选项后【参考方案6】:

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

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

【讨论】:

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

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

【讨论】:

【参考方案8】:

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

【讨论】:

【参考方案9】:

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

【讨论】:

【参考方案10】:

关于这项工作的其他答案,但如果您想避免记住命令行参数,您也可以将 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 下载设置肯定是用户偏好,而不是项目级别的问题?请参阅my answer below 了解如何将其放入settings.xml 文件中。 我收到了这个警告:[WARNING] 'build.plugins.plugin.version' for org.apache.maven.plugins:maven-eclipse-plugin 丢失。要解决这个问题,您可以在 下添加类似这样的内容:2.9【参考方案11】:

我不希望将源/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 插件应该如何找到这些配置设置?你认为它会寻找全局属性?【参考方案12】:

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

【讨论】:

【参考方案13】:

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

【讨论】:

【参考方案14】:
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 配置文件。【参考方案15】:

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!

【讨论】:

【参考方案16】:

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

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

【讨论】:

【参考方案17】:

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

【讨论】:

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

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

【讨论】:

以上是关于获取附加到 Eclipse 的源 jar 文件以获取 Maven 管理的依赖项的主要内容,如果未能解决你的问题,请参考以下文章

如何将 javadoc 或源附加到 libs 文件夹中的 jar?

Eclipse:通过本地属性将源/javadoc 附加到库

如何在 Eclipse 中附加 Android 支持库源?

Eclipse附加项目中的某个jar包的源码

EclipseADT怎么关联android的源码?

decompile APK + eclipse to debug