3
votes

I am trying to build an EJB in an EAR. My EJB has dependencies on SNAPSHOTS. So when I build the EAR my structure looks like this:

my-ear-1.0.0-SNAPSHOT.ear
 + META-INF  
  - application.xml
  - MANIFEST.MF
 - my-ejb-1.0.0-SNAPSHOT.jar
 - third-party-lib-1.0.0-SNAPSHOT.jar

However, when using the maven-ejb-plugin to generate its MANIFEST.MF:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-ejb-plugin</artifactId>
  <version>2.3</version>
  <configuration>
    <archive>
      <manifest>
        <addClasspath>true</addClasspath>
      </manifest>
    </archive>
  </configuration>
</plugin>

The problem I have, is the MANIFEST.MF lists the SNAPSHOT as how it appears in Nexus which is not how the maven-ear-plugin named it when building the ear.

Manifest-Version: 1.0
Build-Jdk: 1.6.0_25
Class-Path: third-party-lib-1.0.0-20121026.140152-21.jar

So of course I'm getting ClassNotFoundException s because the EJBs classpath is looking for a jar file that doesn't exist.

Basically I need to know either:

  1. How do I get the maven-ear-plugin to pull in the jars into the ear without the -SNAPSHOT format?
  2. How do I get the maven-ejb-plugin to use the -SNAPSHOT format in the MANIFEST.MF?
2

2 Answers

10
votes

I found the solution to my problem by looking through the maven archiver documentation at Maven Archiver - Handling Snapshots.

I just needed to configure my maven-ejb-plugin so that it didn't use "unique versions":

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-ejb-plugin</artifactId>
            <version>2.3</version>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>                           
                        <useUniqueVersions>false</useUniqueVersions>
                    </manifest>
                </archive>
            </configuration>
        </plugin>

RTFM closer next time I guess :)

0
votes

Using Maven version 3.6.2.

Below configuration of maven-ear-plugin solved my issue.

<plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-ear-plugin</artifactId>
      <version>3.0.1</version>
      <configuration>
        <outputFileNameMapping>@{artifactId}@-@{baseVersion}@@{dashClassifier?}@.@{extension}@</outputFileNameMapping>
        <generateApplicationXml>true</generateApplicationXml>
        <version>7</version>
      </configuration>
    </plugin>

if required you can also change the format of outputFileNameMapping but use baseVersion to solve this timestamp issue.