tags:

views:

54

answers:

2

Suppose I have a war and jar projects defined in maven.

The Jar project is dependent on the War project

I have managed to get this working in package mode by adding

In the war project <attachClasses> to true in the war plugin.

And making a dependency to

        <groupId>com</groupId>
        <artifactId>oneway-delegator</artifactId>
        <version>1.0</version>
        <classifier>classses</classifier>

in the jar pom.

But when running only compile the classes jar is not created and everything fails.

Any ideas folks ??

+4  A: 

Don't do this.

That is not an acceptable dependency to make a jar (plain java code) dependent on a war (jee specific application package). If you have code in your war that you are dependent on, then that code should be in it's own jar and then both the web app and the jar project would have a common dependency on it.

Robin
Yea , that sounds like a good idea ... Thanks
Roman
Good advice. "When in doubt, create another module", when it comes to maven.
whaley
+1  A: 

But when running only compile the classes jar is not created and everything fails.

You can indeed configure the maven-war-plugin to package/deploy the classes and resources included in your webapp as an "attached" JAR artifact with a classifier with the following configuration:

<project>
  ...
  <artifactId>mywebapp</artifactId>
  <version>1.0-SNAPSHOT</version>
  ...
  <build>
    <plugins>
      <plugin>
        <artifactId>maven-war-plugin</artifactId>
        <version>X.Y</version>
        <configuration>
          <attachClasses>true</attachClasses>
        </configuration>
      </plugin>
    </plugins>
  </build>
  ...
</project>

But this artifact is created during the package phase so don't expect it to be there if you run compile only.

Note that this configuration option has been introduced for a very particular use case, the skinny war use case. If you need to re-use this JAR in another project the recommended approach is in general to move the classes to a separate module that builds a JAR, and then declare a dependency on that JAR from your webapp as well as from any other projects that need it.

Pascal Thivent