ChatGPT解决这个技术问题 Extra ChatGPT

How to download sources for a jar with Maven?

In my project I am using a JAR file provided via Maven. But what Maven gives me is only this jar - no javadocs and no sources. Pressing "Download Sources" has no effect: Eclipse still does not find the sources of the jar.

What this depends on? Should repository provide sources automatically?

May be I need to write something in POM to instruct Maven to download sources?

My current pom follows:

<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>

Why Maven does not say any comments on it's sources download fail?


h
hovanessyan

2020 Update:

The maven dependency plugin should be used whit the dependency:sources goal:

  <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>

This can also be run from the command line as:

mvn dependency:sources -Dsilent=true

Executing mvn dependency:sources will force maven to download all sources of all jars in the project, if the sources are available (are uploaded in the repository where the artifact is hosted). If you want to download javadoc the command is mvn dependency:resolve -Dclassifier=javadoc

Deprecated:

It's also possible to create a profile in your settings.xml file and include the following properties: true true


But if there are no sources in repository Maven will just do nothing silently, right? No errors, no warnings?
yes, I suppose so, at least if it's not running in some very verbose/debug mode. Maybe it's possible to run it in debug/verbose mode and grep for the specific messages.
@hovanessyan - Can we add some setting which pulls jars only for some of the dependencies rather than all of them ?
These properties are for the deprecated Eclipse Maven Plugin (maven.apache.org/plugins/maven-eclipse-plugin/…). They won't do anything if you're not using that plugin.
@Leponzo got it, thanks.
K
Kalpesh Soni
mvn dependency:sources
mvn dependency:resolve -Dclassifier=javadoc

if it does not have sources it should say something like

[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

A
Arjan

It is best not to rely on the Eclipse plugin as it is deprecated. Using the downloadSources and downloadJavadocs properties did not work for me. The answer posted above regarding the use of the dependencies plugin word. However, you may wish to automatically download sources and javadocs. Furthermore you may wish to always create a source jar and a javadoc jar. Put this in the pom of your project. If you use modules, put in your parent 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>

I agree with @AlmirCampos
A
Alireza Fattahi

In eclipse, rigth click on your project then Maven>Download Sources again Maven>Download Javadoc


M
Marinos An

You can also download sources under target/dependencies using:

mvn -Dclassifier=sources dependency:copy-dependencies

k
kevinpeterson

The source/javadoc jars may not have been provided and are not in the repository -- there is nothing that requires a source/javadoc jar to be present.


R
RaamEE

extending on @hovanessyan answer.

A basic profile for enabling the downloadSources and downloadJavadocs, in Maven's settings.xml will look like this. e.g. profile id is 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>