我希望我的ModuleTypeA war包含ModuleBase作为与'src / main / java / typeA'包的依赖关系排除和类似的ModuleTypeB war包括ModuleBase作为依赖与'src / main / java / typeB'包排除。< / p>
这是我的项目结构:
ModuleBase
|
|----> src/main/java/base
|----> src/main/java/typeA
|----> src/main/java/typeB
|----> pom.xml
ModuleTypeA
|
|----> src/main/java/..
|----> pom.xml
ModuleTypeB
|
|----> src/main/java/..
|----> pom.xml
我是Maven的新手,不知道如何实现这一目标。 ModuleBase不能是父项目,因为我需要为它构建一个jar(不能有包装类型pom)所以我可以创建一个顶级父项目。
欢迎任何建议。
由于
答案 0 :(得分:1)
首先,阅读有关依赖项排除的文章: Optional Dependencies and Dependency Exclusions
如果要从ModuleBase构建.war文件,则可以不是ModuleBase的ModuleTypeA的依赖,而是ModuleB的覆盖,类似的ModuleTypeB作为ModuleBase的覆盖。为此,您可以使用Maven War Plugin: Maven War Plugin
这样,为了排除包,请在pom.xml中使用它:
<excludes>
<exclude>src/main/java/typeA</exclude>
</excludes>
更新:
我还没有尝试过,但有两种方法可以从.jar中排除一个包。
1)使用Maven Assembly Plugin。以下是您可以参考的示例:
Exclude files with maven assembly does not work
2)使用Maven Jar Plugin,以此答案为例:
答案 1 :(得分:1)
您可以在ModuleBase中创建不同的程序集,并在ModuleTypeA / B中将它们称为系统依赖项。
您可以使用<systemPath>../module-base/target/rt.jar</systemPath>
也许Multiple assemblies from one maven project会帮助您处理汇编主题。
答案 2 :(得分:1)
通常看起来应该是这样的:
proj
+ proj-base
+ src/main/java/ // containing base code
+ pom.xml
+ proj-mod-type-a
+ src/main/java/ // containing module a code
+ pom.xml // dependency to proj-base
+ proj-mod-type-b
+ src/main/java/ // containing module b code
+ pom.xml // dependency to proj-base
+ proj-a-web
+ src/main/java // war A source
+ pom.xml // dependency to proj-base and proj-mod-type-b
+ proj-b-web
+ src/main/java // war B source
+ pom.xml // dependency to proj-base and proj-mod-type-a
简而言之,将项目拆分为有意义的模块,每个模块都是依赖的单元。根据您需要的依赖关系构建WAR。
如果proj-base
实际上是一个要在其他WAR中重用其内容的WAR,那么您可能会更接近Maven中WAR覆盖的行为。但是,我认为基本思想仍然是相同的:在构建WAR / EAR时更好地模块化项目并具有适当的依赖性