Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to handle with CLASSPATH in Maven project?

I am trying simple Maven app with Log4J ver 2-beta 9. In my pom.xml file I have these two dependencies (as is mentioned in Log4J Maven webpage):

<dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>2.0-beta9</version>
</dependency>
<dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.0-beta9</version>
</dependency>

Eclipse sees Log4J library:

enter image description here

But when I package the app and run it this Exception is thrown:

java -cp target/notification-1.0.0.jar com.example.Sandbox

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/log4j/LogManager
    at com.example.Sandbox.<clinit>(Sandbox.java:13)
Caused by: java.lang.ClassNotFoundException: org.apache.log4j.LogManager
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    ... 1 more

I searched for this Exception and it seems to be related to CLASSPATH variable.

How should be CLASSPATH set for Maven project?

like image 370
user2148736 Avatar asked Nov 18 '13 10:11

user2148736


1 Answers

Maven is a build tool. It doesn't help you much running the final application.

You can use mvn exec:java -Dexec.mainClass="com.example.Sandbox" to run your app (see the question Maven Run Project) but this gets tedious when you have to pass arguments to it.

You can get the classpath that Maven used to compile your application with mvn dependency:build-classpath

That will print the classpath to the console. Note that it will be missing target/notification-1.0.0.jar

Another useful tool in this area is the assembly plugin; it will create one very big JAR with all the dependencies rolled into a single file when you specify the descriptor jar-with-dependencies.

like image 89
Aaron Digulla Avatar answered Oct 03 '22 21:10

Aaron Digulla