Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.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 打包jar无效聚合器项目需要pom作为打包_Java_Maven_Jar_Javafx - Fatal编程技术网

Java 打包jar无效聚合器项目需要pom作为打包

Java 打包jar无效聚合器项目需要pom作为打包,java,maven,jar,javafx,Java,Maven,Jar,Javafx,我的项目有不同的模块 每个模块都有一个pom.xml,用于指定jar打包 每个pom都表示公共父级 在父模块中还有一个pom.xml,它包含所有模块 当我尝试使用父模块的pom.xml进行打包时,它显示了一个错误——“打包jar是无效的聚合器项目,需要pom作为打包” 如何从maven创建应用程序的可执行jar?maven要求父级是打包的pom 通过包含一系列插件执行并将它们附加到后续的生命周期阶段,您可以使pom项目表现得像jar项目一样。这不是一条快乐的路。相反,以下是一个例子 从面向对

我的项目有不同的模块

  • 每个模块都有一个pom.xml,用于指定jar打包
  • 每个pom都表示公共父级
  • 在父模块中还有一个pom.xml,它包含所有模块
当我尝试使用父模块的pom.xml进行打包时,它显示了一个错误——“打包jar是无效的聚合器项目,需要pom作为打包”


如何从maven创建应用程序的可执行jar?

maven要求父级是
打包的
pom

通过包含一系列插件执行并将它们附加到后续的生命周期阶段,您可以使
pom
项目表现得像
jar
项目一样。这不是一条快乐的路。相反,以下是一个例子

从面向对象的角度来看,您想要什么?你有一个物体是由一堆其他物体组成的,对吗?换句话说,与继承相反的是组成

您的最终交付由其他(
jar
)项目组成,即其他项目是最终交付项目的依赖项。您将把其他项目分别定义为
依赖关系
,以便使用最终交付的人都知道要获得什么(可传递的)依赖关系。或者,最终交付
jar
可以打包为,从而包含其所有依赖项。这一切实际上取决于最终交付的使用方式

同时,以下两个方面(可能)仍然存在:

  • 父项目(与最终交付项目不同,事实上它也可能是最终交付项目的父项目)定义了其后续子项目之间的共性,这是您应该从继承中获得的。子项目是指通过POM中的
    parent
    配置引用父项目的任何项目
  • 一个定义模块的项目,这些模块可以很容易地一次性构建。模块是通过使用
    模块引用的项目。模块
    。这通常(我猜>99%)在父项目中完成,但不一定。您也可以将它放在最终交付项目中(不影响继承,因为这是一个不同的野兽),但它是非典型的,我不会去那里

简而言之:如果您的父聚合器项目不包含源代码(这是一个很好的做法),只需将此添加到您的父聚合器pom.xml中即可:

<packaging>pom</packaging>
pom
如果父项目包含源代码,我强烈建议您:

  • 将此代码移到新模块中(我们称之为
    commons
  • commons
    作为父项目的子模块
  • 添加
    commons
    模块作为所有其他需要它的模块(可能是所有模块)的依赖项
  • 在父pom.xml中添加
    pom