一般注意事项
As per doc http://maven.apache.org/guides/mini/guide-using-one-source-directory.html说,你试图实现的是不好的做法 :
从单个源目录生成多个唯一的 JAR
正如许多抱怨无法将源代码分散到多个源目录中的人似乎抱怨不想分散任何内容一样,使用包含和排除从单个目录生成多个独特的工件。
为什么不推荐这个?
这种做法可能会令人困惑且存在风险。
您最终可能会构建两个包含相同类的 JAR - 这表明公共功能应该被抽象为单独的依赖项。
您最终可能会在两个 JAR 之间引入您没有意识到的依赖关系,而且通常是循环依赖关系。这表明这些类位于错误的 JAR 中,或者可能所有内容都应该只是一个 JAR。
适合 Maven 最佳实践的解决方案
您应该考虑将项目分成两个不同的项目,每个项目都有一个 pom,因此每个项目都会生成一个工件,这里是一场战争。
两个简单的项目
您可以通过使用两个简单的项目来实现这一点:
service1-simple-webproject
|-- src
`-- pom.xml
service2-simple-webproject
|-- src
`-- pom.xml
这很简单,但是您可能无法轻松共享它们之间的属性/依赖关系/关系。
只需将您自己的代码拆分到单独的目录中,并尝试使其作为两个独立的项目工作。
如果您认为它们之间可以共享一些代码(实用程序、配置等),请参阅下一节有关多模块的内容。
多模块结构
或者您可以使用适当的多模块层次结构:
parent-multimodule-project
|-- service1-simple-webmodule
| |-- src/
| `-- pom.xml
|-- service2-simple-webmodule
| |-- src
| `-- pom.xml
`-- pom.xml
这将允许您在项目之间建立关系,在更高级别共享配置,...
看一下这个文档:
- Maven 官方文档:http://maven.apache.org/guides/mini/guide-multiple-modules.html http://maven.apache.org/guides/mini/guide-multiple-modules.html
- Sonatype 很棒的文档:http://www.sonatype.com/books/mvnex-book/reference/multimodule.html http://www.sonatype.com/books/mvnex-book/reference/multimodule.html
我可能会引导您创建第三个项目,可能名为 core 或 util,它将生成一个 jar,其中包含两个 Web 项目的公共类。
这确实是最好的办法了!
功能性解决方案,但强烈不建议使用
我只会给你一些信息,因为我什至确信它可以在这种情况下发挥作用。
Maven Assembly Plugin 允许您基于 xml 描述文件生成不同格式的包(zip、jar、war、其他……)。
这里的文档:http://maven.apache.org/plugins/maven- assembly-plugin/ http://maven.apache.org/plugins/maven-assembly-plugin/
我再次强烈建议您不要使用这种解决方法。