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>
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上使用。现在,我切换到,无法使附加程序正常工作。 下面的附加程序可以正常工作。但是永远不会创建的日志文件。为什么? 问题答案: 该标记缺少属性。