自定义maven可部署(已删除某些依赖项的战争)

时间:2012-05-31 07:04:07

标签: java maven deployment maven-2

我有一个带有maven的多模块Web应用程序构建。我们按照正常情况构建战争,并使用tomcat在开发人员计算机和本地测试服务器上部署和运行。

然后我们要将应用程序部署到云端。为此,我们创建了一个特殊版本的tomcat,其中包含所有已预加载的库以及仅包含我们代码的特殊版本的war。这里指的是tomcat预装在云服务器上,每次更改时都会上传war。目前,我们不得不手动删除内置战争的依赖关系。

maven做这件事的最佳方法是什么?我应该构建自定义包装类型还是运行一些post build插件来删除这些战争?或者是其他东西?我认为激活此自定义构建的最佳方法是通过配置文件。我确实尝试通过在新配置文件中将它们设置为scope = provided来删除这些依赖项,但是传递依赖项仍然使它成为战争。

2 个答案:

答案 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>

在配置文件中指定此插件,仅执行生产。