java - 如何处理Maven项目中的CLASSPATH?

标签 java maven classpath

我正在尝试使用 Log4J ver 2-beta 9 的简单 Maven 应用程序。在我的 pom.xml 文件中,我有这两个依赖项(如 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 看到 Log4J 库:

enter image description here

但是当我打包应用程序并运行它时,会抛出此异常:

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

我搜索了这个异常,它似乎与 CLASSPATH 变量有关。

Maven项目的CLASSPATH应该如何设置?

最佳答案

Maven 是一个构建工具。它对您运行最终应用程序没有多大帮助。

您可以使用 mvn exec:java -Dexec.mainClass="com.example.Sandbox" 来运行您的应用程序(请参阅问题 Maven Run Project ),但是当您必须向其传递参数时,这会变得乏味。

您可以通过 mvn dependency:build-classpath 获取 Maven 用于编译应用程序的类路径

这会将类路径打印到控制台。请注意,它将缺少 target/notification-1.0.0.jar

该领域的另一个有用工具是 assembly plugin ;当您指定描述符 jar-with-dependencies 时,它将创建一个非常大的 JAR,并将所有依赖项汇总到一个文件中。

关于java - 如何处理Maven项目中的CLASSPATH?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52313528/

相关文章:

java - 使用 gRPC 构建解决方案

java - 在 Selenium 中使用 privatebrowsing 打开 Firefox 配置文件

java - Vertx 尝试启动嵌入式服务器

java - 搜索并列出 .m2(本地)maven 存储库

java - 从 Windows 命令提示符执行 Java 程序(NCBO 提取工具)不起作用...用户指南使用 Linux 语法

java - 在 JTextArea 中查找搜索项

java - catch block 中的空指针

java - 当用户未使用 Servlet 登录时如何重定向到索引页面?

gradle - 如何在Gradle中设置JavaExec任务的主类类路径?

java - Gradle JAR 添加到类路径