I have a sample.jar
created from a Maven project with all the dependencies (fat jar using maven assembly plugin) it requires. I use this jar in a client's application by using mvn install:install-file
and including the dependency in the client application's pom.xml. This works.
But is there a way such that I do not have to build the sample.jar
as a fat jar?
Instead let the client application's pom resolve the dependencies required by sample.jar
as well by reading the sample.jar's pom.xml
, if all of the dependencies of sample.jar
are available from Maven central repo?
My maven assembly plugin.
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>myMainClass</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<appendAssemblyId>false</appendAssemblyId>
</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>
In your repository of choice (Central, a proprietary Artifactory etc.), you need to upload both the pom and the (thin) jar.
When you declare a dependency in the client project, Maven will automatically look for both. It will use the pom to determine the transitive dependencies and will compile against the jar.
There are a few things to note here.
maven-assembly-plugin
will create an additional file next to the thin (regular) jar file it creates. You can check if that is the case by looking at your project's target
folder. maven-assembly-plugin
would also make any artifact it creates a project artifact. When you run mvn install
all project artifacts will be installed in the local Maven repo. That means you probably already have both the thin and the fat jar in your local Maven repo. mvn dependency:tree
in your client project. Please check this answer . Worth adding that either generatePom
or pomFile
options in the mvn install
command are crucial for Maven to be able to resolve transitive dependencies if you use the thin version of your jar. Alternatively, you may upload your thin jar into an artifactory, if possible, that should also do it.
Useful references:
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.