如何在Eclipse中使用模块化项目的.classpath?

时间:2018-01-27 22:27:56

标签: 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 {
}

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>

使用上面的配置,我收到The import java.util.logging cannot be resolved错误。删除<classpathentry kind="src" path="src/main/java"/>会删除错误(可能是因为项目不再被视为模块化)。

我在Eclipse中找到了bug 526831,但从那里看来它并不是一个真正的错误(?)。我是否在项目设置或配置方面做错了什么?

1 个答案:

答案 0 :(得分:1)

module-info.java 中,必须指定所需的模块java.logging(而不是<attribute name="add-exports" value="java.logging/java.util.logging=ALL-UNNAMED"/>中的.classpath):

module com.baseTest {
    requires java.logging;
}

Eclipse提供了一个快速修复( Ctrl + 1 ):添加&#39;需要java.logging&#39;到module-info.java