Eclipse氧气释放1a + Java 9 + maven项目无效

时间:2017-10-20 19:56:56

标签: eclipse maven-3 java-9

我尝试使用eclipse oxygen 1a Release的java 9。至于简单的java 9项目是值得关注的。这是工作。这是java 9简单程序的屏幕截图

Java 9 Without Maven in eclipse

这是我的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);
    }
}

但是使用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>

可以在屏幕截图中看到项目结构。这是我的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);
    }
}

如果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

哪个好。因为现在它正在考虑类路径。模块路径上没有模块。所以模块名称为null。但是,只要我在module-info.java文件夹中引入src/main/java/即可。事情开始变得混乱。这是我用module-info.java尝试的内容。首先我尝试了这个

module pk.training.basit {

}

与我没有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

现在,如果我删除module-info.java。然后右键单击我的项目名称Ch3-02-HelloWorldMaven并选择Configure --> Create module-info.java。它要求我提供模块名称。如果我输入我的模块名称pk.training.basit并点击Finish。然后是结果

Java 9 Maven error

现在,如果我再次尝试运行Welcome.java。我收到了错误

Error occurred during initialization of boot layer
java.lang.module.FindException: Module pk.training.basit not found

现在,如果我删除我的AppTest.java。并将module-info.java更改为此

module pk.training.basit {
    exports pk.training.basit;
    //requires org.junit.jupiter.api;
}

尝试运行Welcome.java。虽然现在项目中没有错误。我得到了输出

Error occurred during initialization of boot layer
java.lang.module.FindException: Module pk.training.basit not found

我不知道我做错了什么。或者maven或eclipse有问题。但在这里我尝试使用eclipse氧气1a,Maven和eclipse。

另外我只有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
....

如果我做错了什么。那么请告诉我。

此外,在eclipse中的一个项目中不能有多个module-info.java文件。就像我们考虑这个链接Java 9 multi module project一样。然后对于多模块项目,结构是你有项目根文件夹。然后在项目根文件夹中,您有一个模块的一个源文件夹。另一个模块的另一个源文件夹。两个源文件夹都有自己的module-info.java文件。

但是如果我试图在日食中做同样的事情。然后我得到了错误。在类路径上找到多个modules-info.java文件。

就像这个想法一样,你有一个maven项目。哪个管理所有依赖项。像spring,apache等。在这个项目中,你有一个像module.web这样的源文件夹,它包含你的web模块相关的java文件和它自己的module-info.java。你有另一个源文件夹module.service。它包含自己的module-info.java。

但似乎你不能在单个项目的eclipse中做到这一点。我不知道它是否有效但是我试过了,我发现你不能以这种方式在日食中做到这一点。

无论如何,如果我做错了,请告诉我。

谢谢。

0 个答案:

没有答案