Intellij的工件和log4j - 如何运行

时间:2017-08-29 07:23:31

标签: intellij-idea log4j2 artifact

您好下, 我使用Intellij 5天,它看起来很不错。所以我创建了一个新的java项目并使用log4j2,简单的业务,一切正常。然后我创建了一个易于部署的工件。问题是,我无法运行/执行工件JAR文件!我收到错误,因为缺少log4j.xml:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/logging/log4j/LogManager
        at iBox.IBox.<init>(IBox.java:64)
        at iboxapp.Start.main(Start.java:28)
Caused by: java.lang.ClassNotFoundException: org.apache.logging.log4j.LogManager
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)

Log4j.xml是工件(JAR文件)的一部分。 xml文件的正确位置在哪里?!我不使用Maven,Intellij 2017.2

有什么想法吗?!

THX

2 个答案:

答案 0 :(得分:0)

首先,您应该使用正确的构建系统,而不是依赖于IDE。如果你是从头开始我建议gradle。

现在说: 错误不会抱怨缺少xml文件,而是关于缺少类文件。

你是如何创建神器的? 为了测试我只是

  • 在IDEA中创建了一个Java项目
  • 将库依赖项添加到log4j-api和log4j-core,版本2.8.2
  • 添加了一个只使用log4j
  • 记录单行的主类
  • 将log4j 2 .xml添加到“src”文件夹的根目录
  • 创建了一个工件:
    • 项目设置 - &gt;文物 - &gt; “+” - &gt; Jar - &gt;来自具有依赖关系的模块
    • 选择了主要课程
    • 并保留“来自图书馆的JAR文件” - &gt;提取到目标JAR“已选择
  • 构建工件:构建 - &gt;构建工件
  • 使用“java -jar test-artifact”从out / artifacts / test-artifact文件夹执行工件

没有问题。

答案 1 :(得分:0)

问题是旧的和新的log4j引用的混合。清理完毕后,一切正常。 THX