Bas*_*sit 5 eclipse maven-3 java-9
我尝试了用含氧1a Release的Java 9。就简单Java 9项目而言。这是工作。这是Java 9简单程序的屏幕截图
这是我的Welcome.java。可以看出我在该程序中使用了Java 9功能
package com.jdojo.intro;
public class Welcome {
public static void main(String[] args) {
System.out.println("Welcome to the Module System.");
// Print the module name of the Welcome class
Class<Welcome> cls = Welcome.class;
Module mod = cls.getModule();
String moduleName = mod.getName();
System.out.format("Module Name: %s%n", moduleName);
}
}
Run Code Online (Sandbox Code Playgroud)
但是在Java 9的Maven项目中,我遇到了问题。我用maven创建了几乎相同的项目。这是我的pom.xml文件。我也使用了junit 5依赖
<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>pk.training.basit</groupId>
<artifactId>Ch3-02-HelloWorldMaven</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>Ch3-02-HelloWorldMaven</name>
<url>http://maven.apache.org</url>
<properties>
<java-version>9</java-version>
<!-- Unit testing -->
<junit.version>4.12</junit.version>
<junit-jupiter-engine.version>5.0.1</junit-jupiter-engine.version>
<junit-platform-runner.version>1.0.1</junit-platform-runner.version>
<!-- Logging -->
<log4j.version>2.9.1</log4j.version>
<jboss-logging.version>3.3.1.Final</jboss-logging.version>
<junit-jupiter-engine.version>5.0.1</junit-jupiter-engine.version>
<maven-compiler-plugin.version>3.7.0</maven-compiler-plugin.version>
<maven-surefire-plugin.version>2.20</maven-surefire-plugin.version>
<exec-maven-plugin.version>1.6.0</exec-maven-plugin.version>
<maven-failsafe-plugin.version>2.20</maven-failsafe-plugin.version>
<maven-javadoc-plugin.version>2.10.4</maven-javadoc-plugin.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!-- Unit Testing -->
<!-- JUnit Jupiter test engine implementation, only required at runtime. -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>${junit-jupiter-engine.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-runner</artifactId>
<version>${junit-platform-runner.version}</version>
<scope>test</scope>
</dependency>
<!-- Logging-->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>${log4j.version}</version>
<scope>compile</scope>
</dependency>
......
</dependencies>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.eclipse.m2e</groupId>
<artifactId>lifecycle-mapping</artifactId>
<version>1.0.0</version>
<configuration>
<lifecycleMappingMetadata>
<pluginExecutions>
<pluginExecution>
<pluginExecutionFilter>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<versionRange>[1.0.0,)</versionRange>
<goals>
<goal>enforce</goal>
</goals>
</pluginExecutionFilter>
<action>
<ignore />
</action>
</pluginExecution>
</pluginExecutions>
</lifecycleMappingMetadata>
</configuration>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven-compiler-plugin.version}</version>
<configuration>
<source>${java-version}</source>
<target>${java-version}</target>
<compilerArgument>-Xlint:all</compilerArgument>
<showWarnings>true</showWarnings>
<showDeprecation>true</showDeprecation>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>${exec-maven-plugin.version}</version>
<executions>
<execution>
<goals>
<goal>java</goal>
</goals>
<configuration>
<mainClass>pk.training.basit.HelloFXApp</mainClass>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>${maven-failsafe-plugin.version}</version>
<executions>
<execution>
<id>integration-test</id>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>${maven-javadoc-plugin.version}</version>
<configuration>
<additionalparam>-Xdoclint:none</additionalparam>
</configuration>
</plugin>
</plugins>
</build>
Run Code Online (Sandbox Code Playgroud)
屏幕截图中可以看到项目结构。这是我的AppTest.java
package pk.training.basit;
import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.Test;
public class AppTest {
@Test
void myFirstTest() {
assertEquals(2, 1 + 1);
}
}
Run Code Online (Sandbox Code Playgroud)
如果module-info.java中没有文件src/main/java。然后运行此测试用例。只需右键单击并选择Run As--> Junit Test。如果我选择了Java文件,则Welcome.java选择Run As --> Java Application。然后我得到以下输出
Welcome to the Module System.
Module Name: null
Run Code Online (Sandbox Code Playgroud)
没关系 因为现在正在考虑上课路径。并且模块路径上没有模块。因此模块名称为null。但是,一旦我module-info.java在src/main/java/文件夹中介绍。事情开始变得混乱。这是我尝试过的module-info.java。首先我尝试了
module pk.training.basit {
}
Run Code Online (Sandbox Code Playgroud)
与我的第一个没有maven的项目相同。我在AppTest.java中遇到错误。导入无法解决。现在,如果我右键单击,Welcome.java然后选择Run As --> Java Application。它说存在错误要继续。如果我选择是。我得到以下输出
Error occurred during initialization of boot layer
java.lang.module.FindException: Module pk.training.basit not found
Run Code Online (Sandbox Code Playgroud)
现在,如果我删除自己的module-info.java。然后右键单击我的项目名称,Ch3-02-HelloWorldMaven然后选择Configure --> Create module-info.java。它要求我输入模块名称。如果输入模块名称pk.training.basit,然后单击确定Finish。然后是结果
现在,如果我再次尝试运行Welcome.java。我得到错误
Error occurred during initialization of boot layer
java.lang.module.FindException: Module pk.training.basit not found
Run Code Online (Sandbox Code Playgroud)
现在,如果我删除了AppTest.java。并更改module-info.java为此
module pk.training.basit {
exports pk.training.basit;
//requires org.junit.jupiter.api;
}
Run Code Online (Sandbox Code Playgroud)
并尝试运行Welcome.java。尽管现在项目中没有错误。我得到了输出
Error occurred during initialization of boot layer
java.lang.module.FindException: Module pk.training.basit not found
Run Code Online (Sandbox Code Playgroud)
我不知道我在做什么错。或者Maven或Eclipse有问题。但是在这里,我尝试使用日食氧气1a,Maven和日食。
我也只有Java 9 GA。我的机器上没有Java 8或Java 7。对于仅Java 9,我必须将此包含在eclipse.ini文件中。-vm C:\Program Files\Java\jdk-9\bin\javaw.exe
....
openFile
--launcher.appendVmargs
-vm
C:\Program Files\Java\jdk-9\bin\javaw.exe
-vmargs
-Dosgi.requiredJavaVersion=1.8
-Dosgi.instance.area.default=@user.home/eclipse-workspace
-XX:+UseG1GC
....
Run Code Online (Sandbox Code Playgroud)
如果我做错了。那请告诉我
另外,在eclipse中的一个项目中,您最多只能有一个module-info.java文件。就像我们考虑这个链接Java 9多模块项目一样。然后,对于多模块项目,结构为项目根文件夹。然后,在项目根文件夹中,一个模块有一个源文件夹。和另一个模块的另一个源文件夹。两个源文件夹都有其自己的module-info.java文件。
但是,如果我试图在日食中做同样的事情。然后我得到了错误。在类路径上找到多个modules-info.java文件。
就像您有一个Maven项目一样。哪个管理所有依赖项。像spring,apache等。在这个项目中,您有一个源文件夹module.web,其中包含与Web模块相关的Java文件以及其自己的module-info.java。您还有另一个源文件夹module.service。其中包含自己的模块-info.java。
但是似乎您无法在单个项目的Eclipse中做到这一点。我不知道它是否有效,但是我尝试了一下,但我发现您无法以这种方式在日食中使用它。
无论如何,如果我做错了,请告诉我。
谢谢。
| 归档时间: |
|
| 查看次数: |
828 次 |
| 最近记录: |