1

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

然后我们要将应用程序部署到云端。为此,我们创建了一个特殊版本的 tomcat,它预先加载了所有库,以及一个只有我们的代码的特殊版本的 war。这里的重点是tomcat是在云服务器上预加载的,每次更改都会上传war。目前,我们不得不从构建的战争中手动删除依赖项。

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

4

2 回答 2

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>.

于 2012-05-31T07:26:43.003 回答
1

如果要排除所有依赖项,可以使用 war 插件packagingExcludes来执行此操作:

    <plugin>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.2</version>
        <configuration>
            <packagingExcludes>WEB-INF/lib/*.jar</packagingExcludes>
            ...
        </configuration>
    </plugin>

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

于 2012-05-31T10:39:40.973 回答