3

我有一个 Maven Web 服务项目,由两个不同的服务类 testClass1 和 testClass2 组成。我想为同一个项目的两个类有两个不同的 WAR 文件。目前我正在为这两个服务生成单个 WAR 文件。

如何为同一个项目生成两个不同的 WAR 文件?提前致谢。

4

1 回答 1

8

一般注意事项

正如文档所说,您尝试实现的是一种不好的做法 :

从单个源目录生成多个唯一 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

这将允许您在项目之间建立关系,在更高级别共享配置,......看看这个文档:

我可能会引导您创建第三个项目,可能命名为 core 或 util,它会生成一个 jar,其中包含两个 Web 项目的公共类。

这真是最好的办法!

功能性解决方案,但强烈不建议使用

我只会给你一些信息,因为我什至确信它可以在这种情况下工作。

Maven Assembly Plugin 允许您根据 xml 描述文件生成不同格式的包(zip、jar、war、其他...)。这里的文档:http ://maven.apache.org/plugins/maven-assembly-plugin/

再次,我强烈建议您不要使用这种解决方法。

于 2013-04-17T10:41:31.017 回答