【问题标题】:Customised maven deployable (war with some dependencies removed)定制的 Maven 可部署(删除了一些依赖项的战争)
【发布时间】:2012-05-31 07:04:07
【问题描述】:

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

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

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

【问题讨论】:

    标签: java maven deployment maven-2


    【解决方案1】:

    如果你想排除所有依赖,你可以使用war插件的packagingExcludes来做到这一点:

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

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

    【讨论】:

    • 是的,谢谢,这是完美的。我可以过滤掉/输入依赖项。这就是我所做的。
    【解决方案2】:

    您可以在 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 不包含在&lt;project&gt;&lt;dependencies&gt;&lt;/dependencies&gt;&lt;/project&gt; 中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-23
      • 1970-01-01
      • 2012-06-17
      • 1970-01-01
      相关资源
      最近更新 更多