【发布时间】:2017-05-18 19:30:31
【问题描述】:
在我由 Maven 构建的应用程序中,我有两个相互排斥的特定于平台的依赖项。在项目构建期间,我想构建两个可运行的 jar,其中一个 jar 包含一个依赖项,第二个 jar 包含另一个依赖项。
我的第一个想法是创建两个构建配置文件,每个配置文件都包含一个依赖项和 Maven 程序集或 Shade 插件来构建一个可运行的 jar。不幸的是,这似乎不起作用,因为只会构建一个罐子。我尝试在命令行 (-Pprofile1,profile2) 上启用两者,将 activeByDefault 都设置为 true 但仍然没有运气。
在我尝试通过创建两个项目子模块进行构建来解决它之前,有没有办法在同一个 Maven 项目中构建两个具有不同依赖项的可运行 jar?
【问题讨论】:
-
您的两个配置文件的策略必须有效;如果只建造一个,那你就做错了。如果可能,显示带有设置的 pom.xml。顺便说一句,
activeByDefault标志有点古怪。也许您在两个配置文件中使用相同的 ID 来执行? -
@Andrei 感谢您的确认 - 我会再做一次并仔细检查所有内容。
-
不用担心;关于我对执行 ID 的评论:如果您只是在两个配置文件中声明插件(没有
èxecution标签),那么我认为一个会覆盖另一个,因为它们都在执行default-jar上运行(我认为这是 ID默认执行)。如果是这种情况,那么只需声明两个单独的执行,每个配置文件中一个,确保指定不同的 ID。 -
您对使用两个不同模块的想法是解决问题(关注点分离)的最佳和最干净的方法。配置文件最终将不起作用。要构建一个版本,您只需调用
mvn clean deploy并获取构建所需的一切。这只能使用两个模块设置。如果您使用配置文件,这个简单的调用将不起作用。
标签: maven maven-3 maven-assembly-plugin maven-shade-plugin