【问题标题】:Maven war plugin archiveClasses but exclude a packageMaven 战争插件 archiveClasses 但不包括一个包
【发布时间】:2016-07-15 11:10:12
【问题描述】:

我的 maven 项目包含两个 src 包和几个依赖项。 我将它打包为一个战争,并在 WEB-INF/libs 中包含了所有依赖项,如 libs。

现在我需要在一个 jar 中包含来自 com.path.to.package.a 的所有已编译项目类,但我还需要排除 com.path.to.package.b 中包含的已编译类。

我知道我可以使用<archiveClasses> 选项,例如:

<groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.6</version>
    <configuration>
        <archiveClasses>true</archiveClasses>
    </configuration>
</plugin>

这会将 jar 项目正确地放入库中,但显然它保留了所有 .class 文件。

我尝试使用 &lt;packagingExcludes&gt;&lt;warSourceExcludes&gt; 等选项执行排除,但没有运气。

我可以使用与&lt;archiveClasses&gt; 配对的任何选项来从 jar 中排除我需要的东西吗?

【问题讨论】:

  • com.path.to.package.b 包中的源类在哪里?
  • 为什么要排除类被打包?没有意义吗?您想排除哪些类?
  • 你试过在 标签下使用 com.path.to.package.b 吗?但是,将包分开在不同的模块中听起来更好
  • @davidhxxx 进入包路径
  • @khmarbaise 确实如此。这是一个具有多个依赖项的项目,其中一个是 spring 项目,一个是 gwt 项目。从 gwt 我只需要生成的 *.js,而不是类,因为它们仅用于构建客户端。因此,我只需要包含“服务器”部分的类并排除所有其他类。

标签: java maven jar war maven-war-plugin


【解决方案1】:

由于它接缝还没有像我正在寻找的那样的解决方案,我最终得到了以下一个快速而肮脏的解决方案:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-antrun-plugin</artifactId>
    <version>1.7</version>
    <executions>
        <execution>
            <id>delete-unused-classes</id>
            <phase>test</phase>
            <goals>
                <goal>run</goal>
            </goals>
            <configuration>
                <tasks>
                    <delete includeemptydirs="true">
                        <fileset dir="${project.build.outputDirectory}/com/path/to/pachage/a" />
                    </delete>
                </tasks>
            </configuration>
        </execution>
    </executions>
</plugin>

通过这种方式,不需要的类在从&lt;archiveClasses&gt; 打包之前被删除,并且它们不会出现在 jar 库中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-04
    • 1970-01-01
    • 2012-03-29
    • 1970-01-01
    • 1970-01-01
    • 2020-01-06
    • 2019-01-27
    • 1970-01-01
    相关资源
    最近更新 更多