我有一个带有maven的多模块Web应用程序构建。我们按照正常情况构建战争,并使用tomcat在开发人员计算机和本地测试服务器上部署和运行。
然后我们要将应用程序部署到云端。为此,我们创建了一个特殊版本的tomcat,其中包含所有已预加载的库以及仅包含我们代码的特殊版本的war。这里指的是tomcat预装在云服务器上,每次更改时都会上传war。目前,我们不得不手动删除内置战争的依赖关系。
maven做这件事的最佳方法是什么?我应该构建自定义包装类型还是运行一些post build插件来删除这些战争?或者是其他东西?我认为激活此自定义构建的最佳方法是通过配置文件。我确实尝试通过在新配置文件中将它们设置为scope = provided
来删除这些依赖项,但是传递依赖项仍然使它成为战争。
答案 0 :(得分:1)
您可以在maven中使用个人资料。正如你所说它不起作用,我可以想到你配置错误的东西。尝试类似:
<profiles>
<profile>
<id>dev</id>
<activation>
<!-- active by default, turn off when on prod -->
<activeByDefault>true</activeByDefault>
</activation>
<dependencies>
<!-- include this in dev, not in prod -->
<dependency>
<groupId>com.company</groupId>
<artifactId>xyz</artifactId>
</dependency>
</dependencies>
</profile>
</profiles>
然后在命令行中,mvn package -P !dev
停用dev
个人资料,以便不包含广告。
确保com.company:xzy
中不包含<project><dependencies></dependencies></project>
。
答案 1 :(得分:1)
如果要排除所有依赖项,可以使用war插件的packagingExcludes
执行此操作:
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.2</version>
<configuration>
<packagingExcludes>WEB-INF/lib/*.jar</packagingExcludes>
...
</configuration>
</plugin>
在配置文件中指定此插件,仅执行生产。