如何使用Maven下载jar的源?


75

在我的项目中,我使用的是通过Maven提供的JAR文件。但是Maven给我的只是这个jar-没有javadocs,也没有源。按下“下载源代码”无效:Eclipse仍然找不到该jar的源代码。

这取决于什么?存储库是否应自动提供源?

可能需要在POM中编写一些内容来指示Maven下载源代码吗?

我当前的pom如下:

<repositories>
    <repository>
        <id>xuggle repo</id>
        <url>http://xuggle.googlecode.com/svn/trunk/repo/share/java/</url>
    </repository>
</repositories>

<dependencies>

    <dependency>
        <groupId>xuggle</groupId>
        <artifactId>xuggle-xuggler</artifactId>
        <version>5.3</version>
        <type>rar</type>
    </dependency>

</dependencies>

为什么Maven不会对源下载失败发表任何评论?

Answers:


126

2020更新:

Maven的依赖插件应使用丝毫的dependency:sources 目标

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <version>3.1.1</version>
    <executions>
      <execution>
        <id>download-sources</id>
        <goals>
          <goal>sources</goal>
        </goals>
        <configuration>
        </configuration>
      </execution>
    </executions>
  </plugin>

也可以从命令行运行,如下所示:

mvn dependency:sources -Dsilent=true

不推荐使用:

mvn dependency:sources如果源可用(在托管工件的资源库中上载), 执行将强制maven下载项目中所有jar的所有源。如果要下载javadoc,则命令为mvn dependency:resolve -Dclassifier=javadoc

也可以在settings.xml文件中创建一个配置文件,并包含以下属性:

<properties>
  <downloadSources>true</downloadSources>
  <downloadJavadocs>true</downloadJavadocs>
</properties>


但是,如果存储库中没有任何源,那么Maven只会默默地做任何事,对不对?没有错误,没有警告?
Suzan Cioc

是的,我想是这样,至少如果它不在某些非常冗长的/调试模式下运行。也许可以在调试/详细模式下运行它,并针对特定消息运行grep。
hovanessyan

我添加了一个答案,以扩展将这些属性添加到maven settings.xml中
RaamEE 2014年

1
@hovanessyan-我们可以添加一些设置来仅对某些依赖项而不是全部依赖项提取jar吗?
MasterJoe

1
这些属性适用于已弃用的Eclipse Maven插件(maven.apache.org/plugins/maven-eclipse-plugin/…)。如果您不使用该插件,他们将不会做任何事情。
AndrewBourgeois

55
mvn dependency:sources
mvn dependency:resolve -Dclassifier=javadoc

如果没有资料来源,应该说类似

[INFO] The following files have NOT been resolved:
[INFO]    com.oracle:ojdbc6:java-source:sources:12.1.0.1
[INFO]    javax:javaee-api:java-source:sources:6.0

13

最好不要依赖Eclipse插件,因为它已过时。使用downloadSourcesdownloadJavadocs属性对我不起作用。上面发布的关于依赖插件单词使用的答案。但是,您可能希望自动下载源代码和javadocs。此外,您可能希望始终创建一个源jar和一个Javadoc jar。把它放在项目的pom中。如果使用模块,请放入父pom中。

<build>
    <plugins>
        <!-- download sources and javadoc -->
        <plugin>
            <artifactId>maven-dependency-plugin</artifactId>
            <version>2.10</version>
            <executions>
                <execution>
                    <id>download-sources</id>
                    <goals>
                        <goal>sources</goal>
                    </goals>
                </execution>
                <execution>
                    <id>download-javadoc</id>
                    <configuration>
                        <classifier>javadoc</classifier>
                    </configuration>
                    <goals>
                        <goal>resolve</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        <!-- Always create javadoc jar. -->
        <plugin>
            <artifactId>maven-javadoc-plugin</artifactId>
            <version>2.10.4</version>
            <executions>
                <execution>
                    <id>attach-javadoc</id>
                    <goals>
                        <goal>jar</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        <!-- Always create source jar. -->
        <plugin>
            <artifactId>maven-source-plugin</artifactId>
            <version>2.10</version>
            <executions>
                <execution>
                    <id>attach-sources</id>
                    <goals>
                        <goal>jar</goal>
                        <goal>test-jar</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

我同意@AlmirCampos
user1561783


4

可能没有提供source / javadoc jar,也没有在存储库中-没有任何内容要求提供source / javadoc jar。


4

您也可以target/dependencies使用以下命令下载源:

mvn -Dclassifier=sources dependency:copy-dependencies

3

扩展@hovanessyan答案。

Maven的settings.xml中用于启用downloadSources和downloadJavadocs的基本配置文件如下所示。例如,个人资料ID为downloadSources

<!-- add the profile under profiles section -->

    <profile>
        <id>downloadSources</id>
        <properties>
            <downloadSources>true</downloadSources>
            <downloadJavadocs>true</downloadJavadocs>           
        </properties>
    </profile>

<!-- activate the profile under activeProfiles section -->

  <activeProfiles>
    <activeProfile>downloadSources</activeProfile>
  </activeProfiles>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.