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;
}