我有一个maven web服务项目,由两个不同的服务类testClass1和testClass2组成。我想为同一个项目的两个类都有两个不同的WAR文件。目前我正在为这两种服务生成单个WAR文件。
如何为同一个项目生成两个不同的WAR文件? 提前致谢。
答案 0 :(得分:8)
正如per doc所说,你试图实现的是一个糟糕的实践:
从单一源目录生成多个唯一JAR
许多抱怨无法将资源分布到多个源目录的人似乎抱怨不想传播任何内容,使用包含和排除从单个目录生成几个独特的工件。
为什么不推荐这个?
这种做法可能会造成混淆和风险。
您最终可能会构建两个包含相同类的JAR - 这表明应该将公共功能抽象为一个单独的依赖项。 您最终可能会在两个未实现的JAR之间引入依赖关系,并且通常是循环依赖关系。这表明这些类是在错误的JAR中,或者说一切都应该只是一个JAR。
您应该考虑将项目分成两个不同的项目,每个项目都有一个pom,因此每个项目都会生成一个工件,这里就是一场战争。
您可以通过使用两个简单项目来实现这一目标:
service1-simple-webproject
|-- src
`-- pom.xml
service2-simple-webproject
|-- src
`-- pom.xml
这很简单,但您可能无法轻易共享属性/依赖关系/它们之间的关系。
只需将您自己的代码拆分为separates目录,并尝试将其作为两个独立的项目。
如果您认为它们之间有共享的代码(实用程序,配置等),请参阅下一节有关多模块的内容。
或者您可以使用适当的多模块层次结构:
parent-multimodule-project
|-- service1-simple-webmodule
| |-- src/
| `-- pom.xml
|-- service2-simple-webmodule
| |-- src
| `-- pom.xml
`-- pom.xml
这将允许您在项目之间建立关系,在更高级别共享配置,...... 请查看此文档:
我可能会引导您创建第三个项目,可能名为core或util,它将生成一个jar,它将包含两个Web项目的公共类。
这是最好的方式!
我只会给你一些信息,因为我甚至确定它可以在这种情况下起作用。
Maven Assembly Plugin允许您根据xml描述文件生成不同格式的包(zip,jar,war,other,...)。 这里有文档:http://maven.apache.org/plugins/maven-assembly-plugin/
我再次强烈建议您不要使用这种解决方法。