我创建了一个使用Maven构建的简单控制台Java应用程序.是否有一种方法可以使用maven命令从命令行运行主类(不需要任何参数),如:
mvn run-app com.example.MainClass
Run Code Online (Sandbox Code Playgroud) 我的Java EE proj构建正常,但在尝试执行时会出现以下错误:
gert@gert-VirtualBox:~/workspace/CDBOOKSTORE$ mvn exec:java
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building CDBOOKSTORE 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] >>> exec-maven-plugin:1.2.1:java (default-cli) @ CDBOOKSTORE >>>
[INFO]
[INFO] --- maven-dependency-plugin:2.8:copy (default) @ CDBOOKSTORE ---
[INFO]
[INFO] <<< exec-maven-plugin:1.2.1:java (default-cli) @ CDBOOKSTORE <<<
[INFO]
[INFO] --- exec-maven-plugin:1.2.1:java (default-cli) @ CDBOOKSTORE ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.505s [INFO] Finished at: Fri Nov 08 14:01:40 EST 2013
[INFO] Final Memory: 9M/21M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to …Run Code Online (Sandbox Code Playgroud) 我对如何分发具有大量依赖关系的Java应用程序感兴趣(在Maven的pom.xml中指定).
显然,可以将所有内容打包在一个大的.jar文件中.然而,这看起来很浪费,因为更新应用程序也需要发送所有依赖项的新副本.
所以我正在寻找一种分发应用程序的方法,该方法执行以下操作:
实现这一目标的最佳方法是什么?
我正在尝试使用 Log4J ver 2-beta 9 的简单 Maven 应用程序。在我的 pom.xml 文件中,我有这两个依赖项(如Log4J Maven 网页中所述):
<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>
Run Code Online (Sandbox Code Playgroud)
Eclipse 看到 Log4J 库:

但是当我打包应用程序并运行它时,会抛出这个异常:
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
Run Code Online (Sandbox Code Playgroud)
我搜索了这个异常,它似乎与 CLASSPATH 变量有关。
应该如何为 Maven 项目设置 CLASSPATH?