導入Java的9拼圖 - Maven的項目在Eclipse中氧氣4.7不起作用
- 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
- >
所有三行是錯誤的。
我該如何避免這種錯誤?
你爲什麼配置了 src/main/java/a sourceDirectory>? –
khmarbaise
除此之外,'module-info.java'文件必須位於'src/main/java'中... – khmarbaise
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目錄下輕鬆地添加更多的拼圖模塊 –