【问题标题】:How to exclude classes from a packaged webapp with maven如何使用 maven 从打包的 webapp 中排除类
【发布时间】:2010-11-21 07:20:44
【问题描述】:

如何过滤 /target/classes 中的某些类,使其不进入 /target/[webapp]/WEB-INF/classes?我希望它们编译到 /target/classes/ 但不是在最后的战争中。

【问题讨论】:

    标签: java maven-2 jakarta-ee


    【解决方案1】:

    这些课程有什么用?如果是用于测试的,可以在 src/test/java 中指定,然后在 test-compile 阶段编译成 target/test-classes,但不会包含在最终的战争中。

    如果它们不是用于测试并且不包含在战争中,也许应该将它们重构到另一个项目中,以便您可以将其指定为依赖项(可能具有“提供”范围,因此它们不会是部署。

    作为参考,您可以将战争配置为在打包时包含和排除资源

    以下示例将包含所有 jpg,但不包括 image2 子文件夹中的资源:

        <configuration>
          <webResources>
            <resource>
              <!-- this is relative to the pom.xml directory -->
              <directory>resource2</directory>
              <!-- the list has a default value of ** -->
              <includes>
                <include>**/*.jpg</include>
              <includes>
              <excludes>
                <exclude>**/image2</exclude>
              </excludes>
            </resource>
          </webResources>
        </configuration>
    

    有关详细信息,请参阅war plugin documentation

    【讨论】:

    • 这些类是编译好的 GWT 客户端类,不需要在服务器上,但需要编译到 /target/classes 以便 GWT 编译、测试和托管运行工作正确。
    • 它们当然需要在你的路径上,但你不能将它们移动到一个 jar 项目中并将其添加为战争的“提供”范围依赖项吗?
    • 我可以,我只是希望不要那样做。它使启动托管模式浏览器成为一个多步骤过程。
    • @kebernet 使其成为一个嵌套项目,其中 WAR 和 JAR 构建在不同的子项目中,这并不会使启动变得更加困难。速度较慢,但​​没那么复杂。
    • @Rich,除非您修改编译以将代码放入 X/WEB-INF/classes 然后将 X 定义为资源文件夹,否则资源过滤对类不起作用。这会行得通,但你必须不让代码发臭。
    【解决方案2】:

    【讨论】:

    • 谢谢,但看起来我可以使用它从 WAR 中删除文件,这很好,但我也希望将它们从工作 webapp 目录中排除,以便“就地运行” " 也可以。
    【解决方案3】:

    假设您将它们放在可以使用 ant 模式定义的包中,您可能会很幸运

      <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.0.2</version>
            <configuration>
                    <excludes>**/dontneed/*.class</excludes>
            </configuration>
      </plugin> 
    

    【讨论】:

    【解决方案4】:

    使用当前版本的 maven-war-plugin (3.0.0) 这对我有用 -

    <profile>
         <id>abc</id>
         ...
         <build>
          <plugin>
            <artifactId>maven-war-plugin</artifactId>
            <version>3.0.0</version>
            <configuration>
              <packagingExcludes>WEB-INF/classes/com/abc/pqr/ClassName.class</packagingExcludes>
            </configuration>
           </plugin>
         </build>
    </profile> 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-05
      • 2017-12-28
      • 2021-01-02
      • 1970-01-01
      • 2018-04-01
      • 2012-04-02
      • 2023-03-05
      • 1970-01-01
      相关资源
      最近更新 更多