我有一个maven项目和一个子模块,用intellij开发,使用Java11。
除非pom.xml文件包含 <packaging>pom</packaging>
,有一个警告
'packaging' with value 'jar' is invalid. Aggregator projects require 'pom' as packaging.
但当packaging设置为“pom”时,我需要的资源文件无法加载;返回null值,并引发异常。从main()方法:
URL resource = getClass().getResource("/fx/gui.fxml");
Objects.requireNonNull(resource);
另一方面,有时子模块找不到,除非我要求pom Package 。然后我要做的是:请求pom打包,启动程序并观察它失败,从pom.xml中删除pom打包语句,再次启动程序,程序就可以工作了。
我的资源文件位于标准位置 src/main/resources/fx/gui.fxml
. pom文件中也给出了此位置:
<build>
<sourceDirectory>${project.basedir}/src/main/java</sourceDirectory>
<testSourceDirectory>${project.basedir}/src/test/java</testSourceDirectory>
<resources>
<resource>
<directory>${project.basedir}/src/main/resources</directory>
</resource>
</resources>
</build>
请帮助我了解发生了什么事。我需要pom Package 吗?如何装载资源?
2条答案
按热度按时间6jjcrrmo1#
看起来你的源代码在你的父母pom里。
父pom(带有子模块)必须打包为pom,并且不能有java源代码。看到这个问题了吗
您应该将代码移到新的子模块中。
esyap4oy2#
包含源代码的项目或模块,必须按照您的要求打包为jar/war。不能 Package 成聚甲醛。通常,当您有多模块项目结构时,pom打包与父模块一起使用,子模块将打包为jar/war。所以在您的例子中,如果您有多模块项目结构,那么您的父打包将是“pom”,并且所有子模块(包含源代码)都必须有jar/war。注意:您的父模块不应该有源代码,如果是,请将源代码移到子模块。多模块项目结构基本上用于存在公共依赖项的地方,并且工件可以在多个子模块中使用,这样就可以消除重复。就像下面一样。