当前位置: 首页 > 知识库问答 >
问题:

如何在Eclipse Oxygen中与maven和java9一起使用log4j?

荀裕
2023-03-14
 requires log4j;
log4j cannot be resolved to a module

=>如何正确地将log4j作为Java9的一个模块依赖项包含进来?

(我对以下依赖项有相同的问题:需要Hibernate.core;需要Hibernate.jpa.2.1.api;需要JCommander;需要JUnit;需要Reflections;)

到目前为止我所做的:

    <!--  plugin for compile phase (and test-compile phase) -->
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.7.0</version>
        <configuration>
            <!-- specify current java version here: -->
            <source>9</source>
            <target>9</target>
        </configuration>                
    </plugin>

更新了pom.xml文件中的log4j版本,因为log4j 1.2似乎不能与Java9一起工作(请参阅https://blogs.apache.org/logging/entry/moving_on_to_log4j_2)

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

共有1个答案

巫马嘉祯
2023-03-14

module-info.java中的错误

即使将项目的遵从性级别设置为Java9,在Eclipse中也可能会显示module-info.java错误。

我希望只有在更改pom.xml文件时才需要更新maven项目。现在我了解到更改module-info.java还需要手动更新maven项目。

我还了解到,最好首先更新pom.xml文件中的版本,然后生成module-info.java。否则,module-info.java将包含不存在的模块,如“requires log4j”而不是“requires log4j.api”

module-info.java中的另一个误导性错误可能是由于pom打包而发生的,请参见下文。

未解决的导入

在(旧的)*.jar文件上使用JDeps获得所需jar文件的列表,例如。

JDEPS--class-path“lib”-recursive my-old.jar>output.txt

使用jar查找jar文件的模块

https://blog.codefx.org/tools/jdeps-tutorial-analyze-java-project-dependencies/#getting-to-know-jdeps

再出口依赖关系

以便自动使log4j对祖代项目可见

grandparent => parent => log4j
requires transitive log4j.api 
requires log4j.api

Java9模块声明中的requires和requires可传递语句之间有什么区别

POM包装

我的主要问题似乎是我的Java8 pom.xml文件使用了pom打包:

<packaging>pom</packaging>

私有静态记录器sysLog=Logger.getlogger(main.class);

私有静态记录器sysLog=logmanager.getlogger(main.class);

b.log4j 2没有PropertyConfigurator。也看这个相关问题:

src/main/resources/log4j2.xml

另请参阅

>

  • log4j2不再支持log4j.properties文件?

    <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>Log4JWithJava9</groupId>
      <artifactId>Log4JWithJava9</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <build>
        <sourceDirectory>src</sourceDirectory>
        <plugins>
          <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.7.0</version>
            <configuration>
              <release>9</release>
            </configuration>
          </plugin>
        </plugins>
      </build>
    
      <dependencies>
      <dependency>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-api</artifactId>
                <version>2.9.1</version>
              </dependency>
              <dependency>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-core</artifactId>
                <version>2.9.1</version>
              </dependency>
      </dependencies>
    
    </project>
    

    module-info.java:

    module Log4JWithJava9 {
        requires javafx.base;
        requires log4j.api; 
    }
    

    main.java:

    import org.apache.logging.log4j.LogManager;
    import org.apache.logging.log4j.Logger;
    
    
    public class Main {
    
        private static Logger sysLog = LogManager.getLogger(Main.class);
    
        public static void main(String[] args) {
    
        }
    
    }
    

    Eclipse插件

  •  类似资料:
    • 我想在java模块中使用CDI功能。我希望我的代码保持泛型,不依赖于特定的实现。 我使用Java11和Maven3.6.0。 为了简单起见,我的目标被简化为在java文件中导入包。当我在没有module(没有)的情况下这样做时,每件事都能正常工作。 我的理解是,CDI库应该采用一个受jar文件名称启发的自动模块名称。当我使用指令运行maven时,我在类路径中看到。我相信,如果我错了,请更正,这应该

    • 我试图使用Maven将Hibernate添加为我的OSGi包的依赖项。在我的POM文件中,我有: 但是,当我运行时,我得到了一个错误: 组织。奥斯基。框架BundleException:捆绑组织中未解决的约束。冬眠核心[8]:无法解决8.0:缺少要求[8.0]osgi。装电线。包裹( 所以我为javax添加了另一个依赖项。企业背景: 解决了之前的错误,但导致了另一个错误: 自动属性安装:file:

    • 我想用Kotlin生成一些uuid4s。我使用Maven管理我的项目,实际上我对Kotlin和Maven都很陌生。 我看到有一个名为的Kotlin库可以满足我的需要。我在https://mvnrepository.com上找到了依赖项片段,并将其添加到pom.xml中的依赖项: 我放了: 在我的Kotlin.tk源文件的开头(我在Github上看到,有些人就是这样使用这个包的)。但当我这样做时:

    • 问题内容: 我正在尝试使SystemJS与Typescript一起使用,但是它们似乎彼此冲突。 我如何利用System.js的自动加载功能而不会与Typescript上的关键字发生冲突?使用import / require可以使Typescript使用它自己的方式来加载和引用文件,尽管它转换为,但对于 是否有可能完全做到这一点,否则我将不得不等待Typescript支持ES6关键字? 问题答案:

    • 我想在Eclipse(Oxygen 4.7.1a)中使用JUnit 5创建一个JUnit测试。这个JUnit测试应该在一个名为test的独立src文件夹中。但是,由于我是JUnit和Java9的新手,我遇到了以下问题。 我不想为此使用像Gradle或Maven这样构建工具。 因为我有两个不同的src文件夹,一个用于项目src,另一个用于测试用例: 我需要两个module-info.java文件吗?

    • 问题内容: 我习惯在普通的log4j上使用。现在,我切换到,无法使附加程序正常工作。 下面的附加程序可以正常工作。但是永远不会创建的日志文件。为什么? 问题答案: 该标记缺少属性。