maven user library not packaged in my runnable jar

142 views Asked by At

I'm now programming Java for a year and had to take over several projects from a previous programmer. I'm not a programming newby since I started with .NET programming in 1998. Now for a Java project, I need to support 24 versions (and rising) of a base library (all the same structure but they are specific for a version of the 3th party application). I started with Maven two days ago and tried this on a small demo workspace in order to learn Maven and get the required things working. Each supported version has several jars which I encapsulated in a user library. To make a build, I would need to modify this library to the correct version and do an export of the project as a Runnable-Jar (everything include in the jar due to license requirements). So I created my first POM and here it is:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>PPC</groupId>
    <artifactId>PPC</artifactId>
    <version>1.0.0</version>
    <packaging>jar</packaging>

    <name>PPC</name>
    <url>http://maven.apache.org</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.16</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>LibraryProject</groupId>
            <artifactId>LibraryProject</artifactId>
            <version>1.0.0</version>
            <scope>compile</scope>
        </dependency>
    </dependencies> <profiles>
        <profile>
            <id>PPC_8.1</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <build>
                <finalName>PPC_8.1</finalName>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-compiler-plugin</artifactId>
                        <version>3.1</version>
                        <configuration>
                            <compilerVersion>1.7</compilerVersion>
                            <source>1.7</source>
                            <target>1.7</target>
                        </configuration>
                    </plugin>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-eclipse-plugin</artifactId>
                        <inherited>true</inherited>
                        <version>2.10</version>
                        <configuration>
                            <classpathContainers>
                                <classpathContainer>org.eclipse.jdt.launching.JRE_CONTAINER</classpathContainer>
                                <classpathContainer>org.eclipse.jdt.USER_LIBRARY/Primavera-P6-8.1</classpathContainer>
                            </classpathContainers>
                        </configuration>
                    </plugin>

                    <plugin>
                        <groupId>org.dstovall</groupId>
                        <artifactId>onejar-maven-plugin</artifactId>
                        <version>1.4.4</version>
                        <executions>
                            <execution>
                                <configuration>
                                    <mainClass>com.company.main.App</mainClass>
                                    <onejarVersion>0.97</onejarVersion>
                                    <attachToBuild>true</attachToBuild>
                                    <classifier>onejar</classifier>
                                </configuration>
                                <goals>
                                    <goal>one-jar</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
        <profile>
            <id>PPC_7.0</id>
            <build>
                <finalName>PPC_7.0</finalName>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-compiler-plugin</artifactId>
                        <version>3.1</version>
                        <configuration>
                            <compilerVersion>1.7</compilerVersion>
                            <source>1.7</source>
                            <target>1.7</target>
                        </configuration>
                    </plugin>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-eclipse-plugin</artifactId>
                        <version>2.10</version>
                        <inherited>true</inherited>
                        <configuration>
                            <classpathContainers>
                                <classpathContainer>org.eclipse.jdt.launching.JRE_CONTAINER</classpathContainer>
                                <classpathContainer>org.eclipse.jdt.USER_LIBRARY/Primavera-P6-7.0</classpathContainer>
                            </classpathContainers>
                        </configuration>
                    </plugin>
                    <plugin>
                        <groupId>org.dstovall</groupId>
                        <artifactId>onejar-maven-plugin</artifactId>
                        <version>1.4.4</version>
                        <executions>
                            <execution>
                                <configuration>
                                    <mainClass>com.company.main.App</mainClass>
                                    <onejarVersion>0.97</onejarVersion>
                                    <attachToBuild>true</attachToBuild>
                                    <classifier>onejar</classifier>
                                </configuration>
                                <goals>
                                    <goal>one-jar</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>

    <pluginRepositories>
        <pluginRepository>
            <id>onejar-maven-plugin.googlecode.com</id>
            <url>http://onejar-maven-plugin.googlecode.com/svn/mavenrepo</url>
        </pluginRepository>
    </pluginRepositories>
</project>

As you can see, I have two profiles. One for v8.1 and one for v7.0.

My 'build' flow: I run 'mvn install' on the libraryProject first. Then I run 'mvn package' on the main project. This one build v8.1 (Default profile) as a runnable jar with all depencies in it except the user library. The next call is 'mvn package -PPPC_7.0' which builds v7.0 without the user library.

So my question: What can I change/doing wrong so the user library is added to the runnable jar for each profile?

Thanks in advance,
Jo

PS: I'm using Eclipse Luna (Java EE IDE)

2

There are 2 answers

0
panayot_kulchev_bg On

What I use is:

 <build>

<plugins>

  <plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <configuration>
      <archive>
        <manifest>
          <mainClass>com.clouway.App</mainClass>
        </manifest>
      </archive>
      <descriptorRefs>
        <descriptorRef>jar-with-dependencies</descriptorRef>
      </descriptorRefs>
    </configuration>
    <executions>
      <execution>
        <id>make-my-jar-with-dependencies</id>
        <phase>package</phase>
        <goals>
          <goal>single</goal>
        </goals>
      </execution>
    </executions>
  </plugin>

</plugins>

`

Good luck!

0
user4998089 On

Robby Cornelissen commented a suggestion a while back:
Any chance of just packaging that up and using it as a dependency? That would definitely solve your problem... – Robby Cornelissen Jun 11 at 8:52

I didn't want to do that, but I did not receive new suggestions (and did not find a solution myself). So I packaged them as suggested and added them as dependency.

This is working for me now.

Thanks and until next time
Jo