2017-06-03 32 views
1

導入Java的9拼圖 - Maven的項目在Eclipse中氧氣4.7不起作用

使用:導入Java的9拼圖 - Maven的項目不起作用

  • JDK 9構建9-EA + 172
  • 的Maven 3.5.0
  • Eclipse的氧氣4.7 RC3版 4.7.0.I20170531-2000從2017年5月31日
  • ECLIPS電子插件:
    • 的Eclipse JDT(Java開發工具)修補的Java支持9(BETA)製氧開發流,1.1.1.v20170526-0728_BETA_JAVA9
    • M2E - Maven的集成爲Eclipse(包括孵化 組件),1.8.0.20170516-2043

克雷婭察新的拼圖,Maven的項目:

mkdir proj1\a\src\main\java\a\a 
cd proj1 

在目錄proj1文件pom.xml

<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>test</groupId> 
    <artifactId>Proj1</artifactId> 
    <version>1.0</version> 
    <packaging>pom</packaging> 
    <modules> 
    <module>a</module> 
    </modules> 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-compiler-plugin</artifactId> 
     <version>3.6.1</version> 
     <configuration> 
      <source>9</source> 
      <target>9</target> 
      <showWarnings>true</showWarnings> 
      <showDeprecation>true</showDeprecation> 
     </configuration> 
     </plugin> 
    </plugins> 
    </build> 
</project> 

在目錄proj1\a文件pom.xml

<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> 
    <parent> 
    <groupId>test</groupId> 
    <artifactId>Proj1</artifactId> 
    <version>1.0</version> 
    </parent> 
    <artifactId>a</artifactId> 
    <packaging>jar</packaging> 
    <build> 
    <sourceDirectory>src/main/java/a</sourceDirectory> 
    </build> 
</project> 

在目錄proj1\a\src\main\java\a文件module-info.java

module a { } 

在目錄proj1\a\src\main\java\a\a文件App.java

package a; 

public class App { 
    public static void main(String[] args) { 
     System.out.println("CLASSPATH:   " + System.getProperty("java.class.path")); 
     System.out.println("Class/Modul:  " + App.class.getSimpleName() + " from " + App.class.getModule()); 
     java.lang.ModuleLayer lr = App.class.getModule().getLayer(); 
     if(lr != null) { 
     System.out.println("Layer.Configuration: " + lr.configuration()); 
     } else { 
     System.out.println("Error:    ModuleLayer is null"); 
     } 
    } 
} 

運行在命令行中的項目:

cd proj1 
mvn clean package 
java -p a\target\a-1.0.jar -m a/a.App 

- >

CLASSPATH: 
Class/Modul:  App from module a 
Layer.Configuration: java..., ... 

- >
完美無誤(CLASSPATH爲空,來自getModule()的名稱正確,ModuleLayer有效)。

打開項目的IntelliJ IDEA 2017.2 EAP
- >
運行完美無錯(CLASSPATH爲空,從getModule名稱()是正確的,ModuleLayer有效)。

在Eclipse Oxygen中導入項目4。7 RC3:
- >

CLASSPATH:   ...\proj1\a\target\classes 
Class/Modul:  App from unnamed module @68f7aae2 
Error:    ModuleLayer is null 

- >
所有三行是錯誤的。

我該如何避免這種錯誤?

+0

你爲什麼配置了 src/main/java/a? – khmarbaise

+0

除此之外,'module-info.java'文件必須位於'src/main/java'中... – khmarbaise

+0

Hi Karl Heinz, there there a recommendation建議: 「'按照慣例,模塊的源代碼位於模塊名稱的目錄中「, 請參閱:http://openjdk.java.net/projects/jigsaw/quick-start。 爲此,您必須: a)將'module-info.java'放在這個目錄下(在我的情況下放在'src/main/java/a'中), 和b)在Maven-POM中配置 src/main/java/a ... 這個工程目錄的佈局是正確的,它的好處是你可以在同一個src/main/java目錄下輕鬆地添加更多的拼圖模塊 –

回答

0

通常的概念,一個單獨的「SRC」文件夾內的所有類應括和包裝在單一module-info.java 此外,module-info.java應該馬上與在src包中。 對於您,目錄proj1\a\src\中的類應該合併。 你應該保持module-info.java在同一級別。 按照this博客進行完整部署。