Java 如何在Eclipse中使用模块化项目的.classpath?
我创建了一个具有以下结构的测试项目:Java 如何在Eclipse中使用模块化项目的.classpath?,java,eclipse,java-9,java-module,eclipse-classpath,Java,Eclipse,Java 9,Java Module,Eclipse Classpath,我创建了一个具有以下结构的测试项目: baseTest |- src/main/java | |- com.base | | |- MainDependency.java | |- module-info.java |- src/test/java |- test.com.base |- SomeTest.java module info.java只是一个空的模块声明: module com.baseTest { } 与Ma
baseTest
|- src/main/java
| |- com.base
| | |- MainDependency.java
| |- module-info.java
|- src/test/java
|- test.com.base
|- SomeTest.java
module info.java
只是一个空的模块声明:
module com.baseTest {
}
与MainDependency.java相同:
package com.base;
public class MainDependency {
}
SomeTest
是一个依赖于main
和JDK中的代码的类:
import java.util.logging.Logger;
import com.base.MainDependency;
public class SomeTest {
String s;
MainDependency md;
Logger j;
}
.classpath
是
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src/main/java"/>
<classpathentry kind="src" path="src/test/java"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER">
<attributes>
<attribute name="module" value="true"/>
<attribute name="add-exports" value="java.logging/java.util.logging=ALL-UNNAMED"/>
</attributes>
</classpathentry>
<classpathentry kind="output" path="bin"/>
</classpath>
在Eclipse中,但从那里看来,它并不是一个真正的bug(?)。我是否在项目设置或配置方面出错?在module-info.java中,必须指定所需的模块java。必须指定日志记录(而不是.classpath中的
):
Eclipse提供了一个快速修复(Ctrl+1):将'requires java.logging'添加到module info.java。您运行的版本已经修复,但将于3月21日与Eclipse Oxygen.3一起发布(同时,您可以使用夜间版本或里程碑版本)。@howlger我尝试了4.8M5,但出现了相同的问题。请确保,要首先修复项目的Java构建路径(创建一个新项目以查看正确的.classpath
应该是什么样子)。@howlger这样做了,没有任何区别。将JUnit添加到modulepath而不是类路径时,应该会出现不同的错误。作为由JUnit JAR引起的错误的解决方法,您必须手动将JUnit 5.0.2或5.0.3 JAR添加到项目中。看哪一个还没有被修复。我建议使用Automatic Module Name
,而不要使用Module info.java
(这不会增加值IMHO)。但是test
没有定义模块,因此它位于未命名模块中。main
需要一个模块应该无关紧要。module info.java
适用于这两个包,独立于它所在的源文件夹。目前,Eclipse只支持每个项目一个模块。如果Eclipse允许多个模块(每个源文件夹一个模块),则每个源文件夹需要不同的输出文件夹(而不是像您的示例中那样仅使用bin
)。在3.8中已经可以定义不同的输出文件夹(并用test
属性标记测试源),但是它似乎没有改变任何东西。是的,一个项目可以有多个输出文件夹,但不能(还)有多个模块(我现在找不到这个改进的Eclipse bug)。好的,所以最终的答案是Eclipse还不支持完整的规范,解决方法是按照您在回答中的建议进行。对
module com.baseTest {
requires java.logging;
}