Maven在具有自定义资源的模块中共享源代码

时间:2015-05-13 21:09:29

标签: java maven packing

我有一个maven项目,应输出3个jar文件。它们共享相同的来源,但拥有不同的资源。

我的项目结构是:

Project/
+-- src/main/java - sources folder
+-- src/main/resources - shared resources (some images)
+-- pom.xml
+-- ModuleA/
|   +-- src/main/java - empty folder
|   +-- src/main/resources - custom resources
|   +-- pom.xml
+-- ModuleB/
|   +-- src/main/java - 1 additional java class
|   +-- src/main/resources - custom resources
|   +-- pom.xml
+-- C & D ...

如何让maven生成4个带有自定义资源和合并java文件的jar文件?如果某些资源覆盖了什么,是否可以将自定义作为优先级?

我尝试过使用过

<build>
    <sourceDirectory>${parent.baseDir}/src/main/java</sourceDirectory>
</build>

在子pom.xml中,但它没有工作

更新1

所以我将结构改为:

Project/
+-- src/main/java - empty
+-- src/main/resources - empty
+-- pom.xml
+-- CoreModule/
|   +-- src/main/java/ - shared sources
|   +-- src/main/resources/ - custom resources
|   |   +-- CoreText.txt
|   +-- pom.xml
+-- ModuleA/
|   +-- src/main/java - empty folder
|   +-- src/main/resources - custom resources
|   +-- pom.xml
+-- ModuleB/
|   +-- src/main/java - 1 additional java class
|   +-- src/main/resources - custom resources
|   +-- pom.xml
+-- C & D ...

我已成功使用maven-shade-plugin使用共享源和资源制作ModuleA.jar和ModuleB.jar。

现在我面临问题,因为maven-shade-plugin不提供过滤器或替换文本工具。我需要根据模块中的规则更改CoreText.txt中的文本。它是文件中的简单字符串替换。有没有办法在maven-shade-plugin中过滤?

1 个答案:

答案 0 :(得分:0)

这在很大程度上取决于您对专业项目(ModuleA-&gt; ModuleD)的处理方式。

你可能想宣布&#34; Project&#34;作为每个模块的依赖,然后看看制作一个uberjar。这可以使用 maven-shade-plugin 完成,也可以使用程序集插件完成(同样,根据您的需要)。还有一个onejar插件,如果你使用Spring Boot,它可以制作一个独立的jar。

另外,FWIW,将您的父项目(&#34; Project&#34;在这种情况下)作为一个实际项目,而不是创建一个合适的父母POM&#34通常是不好的做法。 ;将共享Java模块作为子项(以及模块A-> D)。