pagid
pagid

Reputation: 13877

Use maven to "extend" existing jar file

My project contains a couple of class which have to be integrated into an final jar file.

So my current "workflow" looks like:

mvn compile && jar uf contribution.jar -C target/classes .

I guess this could be done with the maven-jar plugin or through maven-assemblies but can't figure out how.

Upvotes: 1

Views: 1373

Answers (1)

Overlord_Dave
Overlord_Dave

Reputation: 912

Simple - add the element <packaging>jar</packaging> to your pom.xml and invoke the following:

mvn package

See Maven build lifecycle for more information. It really is a must-read if you're planning to use Maven for you project.

Edit

Thanks for the update, I know understand what you mean. There may be a better way to do this, but this is what I use:

Maven will automatically include this jar if you add it as a dependency in the usual way, i.e:

<dependencies>
    ...
    <dependency>
        <groupId>some.group</groupId>
        <artifactId>contribution</artifactId>
        <version>1.0.0</version>
    </dependency>
    ...        
</dependencies>

The question is how to ensure that maven can find the jar? If the jar were in the Maven Global repository it would find it automatically, so always check this first. If not, then you will have to create your own repository to store custom jars. This may not be the most clever way to do it, but it's how I do it. Note that this is not the same thing as the cache stored in the .m2 folder.

Let's say we want to use c:\maven\repo as our local. To do this, first ensure the folder exists then add the following lines to your pom.xml:

<repositories>
    <repository>
        <id>my-repo</id>
        <url>file://c:\maven\repo</url>
    </repository>
</repositories>

Next, you will need to manually add the contribution jar to this repo. To do this execute the mvn deploy:deploy-file command and give it the appropriate values. See here for more information.

Now when build/compile/package your original project, it should include contribution.jar in the packaging as it is a dependency.

Hope this helps :)

Upvotes: 2

Related Questions