Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使Eclipse与JPMS和Maven配合良好_Java_Eclipse_Maven_Java Module - Fatal编程技术网

Java 使Eclipse与JPMS和Maven配合良好

Java 使Eclipse与JPMS和Maven配合良好,java,eclipse,maven,java-module,Java,Eclipse,Maven,Java Module,给定一个在Eclipse中从原型Maven archetype quickstart(junit升级到5.5.2,它支持JPMS)创建的Maven项目,如何将其模块化为JPMS项目,并且在Eclipse中仍然表现良好 当我尝试这样做时,我首先在java文件夹中创建了模块文件夹,并将包结构移动到该文件夹中。项目结构如下所示: jpms(项目文件夹)->src/main/java/org.myorg.mymodule/org/myorg/myorg/myproject/jpmspackage 。到现

给定一个在Eclipse中从原型Maven archetype quickstart(junit升级到5.5.2,它支持JPMS)创建的Maven项目,如何将其模块化为JPMS项目,并且在Eclipse中仍然表现良好

当我尝试这样做时,我首先在
java
文件夹中创建了模块文件夹,并将包结构移动到该文件夹中。项目结构如下所示:

jpms(项目文件夹)->src/main/java/org.myorg.mymodule/org/myorg/myorg/myproject/jpmspackage

。到现在为止,一直都还不错。该项目使用控制台中的
mvn clean install
构建,并执行单元测试。然后将模块文件夹(包含module-info.java文件+包)设置为源文件夹(“在Eclipse中用作源文件夹”)

在Eclipse中执行Maven构建现在失败

无法在“jpms/src/main/java”中嵌套“jpms/src/main/java/org.myorg.mymodule”。要启用嵌套,请从“jpms/src/main/java”中排除“org.myorg.mymodule/”

如何设置源文件夹或构建路径以安抚Eclipse?

模块描述符:

module org.myorg.mymodule {
    requires org.junit.jupiter.api;
}
更新了JUnit依赖关系(该项目最初是由JUnit3-something生成的)


org.junit.jupiter
JUnitJupiter api
5.5.2

版本:Eclipse 2019-09、Java 12、Maven 3.6.2保持项目结构,只需将
模块信息.Java
文件添加到默认包中即可:

  • 右键单击项目文件夹并选择配置>创建模块信息.java
  • 请注意,对于每个模块,都需要一个单独的项目,因为在一个项目中有多个模块(具有不同的依赖项)是没有意义的(如果需要,请使用嵌套项目)


    另请参见此内容。

    不要更改项目结构,只需将
    模块信息.java
    文件添加到默认包中(例如,右键单击项目文件夹并选择配置>创建模块信息.java)。请注意,对于每个模块,需要一个单独的项目,因为在一个项目中有多个模块(具有不同的依赖关系)是没有意义的(如果需要,请使用嵌套项目)。这将满足所述问题,但是,是否可以使用
    javac--module org.myorg.mymodule
    编译模块,而不使用单独的模块文件夹?例如,上面的示例使用
    javac-d target/classes/--module source path src/main/java/--module path libs/--module org.myorg.mymodule
    编译(如果我作弊并在libs中放入所需的jar)。如果没有模块文件夹,javac似乎找不到模块。一个项目结构,在第一级包含源和输出文件夹,在更深一级包含模块文件夹,这与多年来的最佳实践相矛盾(模块化就是封装)。最好使用一个具有最佳实践项目结构的示例,例如(我想这在Eclipse中也适用,无需修改)。如果您回答了第一条评论,我会将其标记为已接受,因为它解决了上述问题(添加文件夹不是先决条件,我只是假设需要)。
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-api</artifactId>
        <version>5.5.2</version>
    </dependency>