Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.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 Maven编译具有循环依赖关系的多模块项目_Java_Maven 3 - Fatal编程技术网

Java Maven编译具有循环依赖关系的多模块项目

Java Maven编译具有循环依赖关系的多模块项目,java,maven-3,Java,Maven 3,我正在做我的OSS小项目,其中我使用Maven作为构建工具。我将项目分成更小的子项目,以简化开发。因此,我有以下结构: project +-- main-module | | | +- pom.xml | +-- submodule1 | | | +- pom.xml | + pom.xml 我的想法是,主模块应该提供每个子模块应该实现的接口,以便插入整个应用程序。因此,submodule1/pom.xml包含对主模块的编译时依赖性引用。反过来,我还需要能够测试整个应用程序,因

我正在做我的OSS小项目,其中我使用Maven作为构建工具。我将项目分成更小的子项目,以简化开发。因此,我有以下结构:

project
+-- main-module
|   |
|   +- pom.xml
|
+-- submodule1
|   |
|   +- pom.xml
|
+ pom.xml
我的想法是,
主模块
应该提供每个子模块应该实现的接口,以便插入整个应用程序。因此,
submodule1/pom.xml
包含对
主模块的编译时依赖性引用。反过来,我还需要能够测试整个应用程序,因此
main module/pom.xml
包含对
submodule1
的测试范围依赖性引用。结果maven拒绝编译项目,说它们包含循环引用

我的想法是maven可以首先编译
主模块的类,因为它不需要对任何子模块的编译时依赖性,然后使用
主模块的编译类可以编译
子模块1的类,然后编译
主模块的测试类(能够运行测试)。但是maven编译器似乎没有考虑依赖性的范围,我需要解决这个问题

我能看到的唯一解决方案是将测试从
主模块
移开,这对我来说没有意义,因为只有该模块提供主逻辑


我的问题-除了移开测试之外,还有其他方法解决这个问题吗?或者我对maven reactor插件应该如何工作的理解有问题吗?

不需要移开测试,您可以将所有API移到它自己的模块中。然后,您的主模块将包含应用程序,您可以自由分发i使用你的应用程序的API允许其他人访问。如果他们想开发新功能,他们不一定需要你的应用程序的源

我认为这是一个更好的样式,因为具有特定功能的子模块现在可以清楚地区分你的应用程序API和你的应用程序需要启动/关闭的代码,等等。


在我看来,这是maven项目的预期方式。它还坚持单一责任原则。主要模块的责任是启动/关闭应用程序等。API模块的责任是展示其他开发人员如何访问您的应用程序。另一个子模块提供特定的功能n应用程序的可选性。

您可以将所有API移动到自己的模块中,而不是移动测试。然后,您的主模块将包含应用程序,您可以自由分发应用程序的API以允许其他人访问。如果他们想开发新功能,他们不一定需要API的源你的应用程序

我认为这是一个更好的样式,因为具有特定功能的子模块现在可以清楚地区分你的应用程序API和你的应用程序需要启动/关闭的代码,等等。


在我看来,这是maven项目的预期方式。它还坚持单一责任原则。主要模块的责任是启动/关闭应用程序等。API模块的责任是展示其他开发人员如何访问您的应用程序。另一个子模块提供特定的功能n应用程序的可选性。

您可以将所有API移动到自己的模块中,而不是移动测试。然后,您的主模块将包含应用程序,您可以自由分发应用程序的API以允许其他人访问。如果他们想开发新功能,他们不一定需要API的源你的应用程序

我认为这是一个更好的样式,因为具有特定功能的子模块现在可以清楚地区分你的应用程序API和你的应用程序需要启动/关闭的代码,等等。


在我看来,这是maven项目的预期方式。它还坚持单一责任原则。主要模块的责任是启动/关闭应用程序等。API模块的责任是展示其他开发人员如何访问您的应用程序。另一个子模块提供特定的功能n应用程序的可选性。

您可以将所有API移动到自己的模块中,而不是移动测试。然后,您的主模块将包含应用程序,您可以自由分发应用程序的API以允许其他人访问。如果他们想开发新功能,他们不一定需要API的源你的应用程序

我认为这是一个更好的样式,因为具有特定功能的子模块现在可以清楚地区分你的应用程序API和你的应用程序需要启动/关闭的代码,等等。


在我看来,这是maven项目的预期方式。它还坚持单一责任原则。主要模块的责任是启动/关闭应用程序等。API模块的责任是展示其他开发人员如何访问您的应用程序。另一个子模块提供特定的功能n您的应用程序的可选性。

我知道这更多是一个评论,但可能会为您提供(不太漂亮)的解决方案:


您可以将您的
子模块1
视为maven surefire插件的依赖项(reactor就是这样),然后使用…即
childDelegation
additionalClasspathElements

我知道这更多是一个注释,但可能会为您提供(不太漂亮)的解决方案:

您可以将您的
子模块1
视为maven surefire插件的依赖项(reactor就是这样),然后使用…即
childDelegation
additionalClasspathElements
我知道这一点