'Create a single jar containing dependencies and Javadoc with Maven
I'm trying to create a jar file with both Javadoc and dependencies that I can use in another project.
I can use mvn package with the following pom.xml plugins:
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<configuration>
<javadocExecutable>${java.home}/bin/javadoc</javadocExecutable>
</configuration>
<version>2.7</version>
<executions>
<execution>
<id>attach-javadoc</id>
<phase>prepare-package</phase>
<goals>
<goal>javadoc</goal>
</goals>
<configuration>
<destDir>docs</destDir>
<reportOutputDirectory>${project.build.directory}/classes/</reportOutputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>fully.qualified.MainClass</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id> <!-- this is used for inheritance merges -->
<phase>package</phase> <!-- bind to the packaging phase -->
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
This creates a Javadoc as well as add the Javadoc and the dependencies to a single jar. However, the Javadoc doesn't actually seem to work as when I hover over the Classes and Methods in Eclipse it says This element neither has attached source nor attached Javadoc and hence no Javadoc could be found.
When I export the jar using the eclipse exporter I can get the Javadoc to work but because my jar is not runnable I can't package it with my dependencies and so it doesn't actually work.
If anyone has any idea how I can get this to work, tell me why my understanding is flawed or can point me in the right direction I will be very appreciative.
Solution 1:[1]
Don't do that. Your library jar does not get to have opinions about which dependency versions to include and how. Let Maven do its job and pull them in transitively in the client projects. (Publish the Maven artifacts if that's the problem; it looks like you're trying to do this part manually.)
Also don't include Javadoc; it's not necessary at runtime and bulks up the deployment package unnecessarily.
Overall, when there's a Standard Way of doing things, it's usually there for a reason and best to go along with it, if for no other reason than that's what everyone you interact with expects.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | chrylis -cautiouslyoptimistic- |
