【问题标题】:Excluding Files From Jar With build-helper-maven-plugin使用 build-helper-maven-plugin 从 Jar 中排除文件
【发布时间】:2020-11-23 17:18:47
【问题描述】:

我有一些与测试相关的类,我想从项目的已编译 jar 输出中排除这些类。这是一个遗留项目,我不想通过将类移动到 src/test 来丢失现有的修订历史。由于我已经在使用 build-helper-maven-plugin 我想我可以在那里指定一个排除模式,但到目前为止我没有尝试过似乎工作。我跑

mvn 全新安装包

在我的项目根目录中,我看到了日志消息

[INFO] --- build-helper-maven-plugin:3.0.0:add-source (add-source) @ Person-ejb --- [INFO] 源目录: /media/psf/Home/Documents/workspace/optics/optics/Person/ejb/src 已添加。

但是当我查看编译后的 jar 时,它仍然包含测试目录及其内容。知道我做错了什么吗?

我的 pom.xml:

          <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>build-helper-maven-plugin</artifactId>
            
            <executions>
              <execution>
                <id>add-source</id>
                <phase>generate-sources</phase>
                <goals>
                  <goal>add-source</goal>
                </goals>
                <configuration>
                  <sources>
                    <source>src/</source>
                  </sources>
                  <excludes>
                    <exclude>**/test/**</exclude>
                  </excludes>
                </configuration>
              </execution>
              
              <execution>
                <id>add-reource</id>
                <phase>generate-resources</phase>
                <goals>
                  <goal>add-resource</goal>
                </goals>
                <configuration>
                  <resources>
                    <resource>
                        <directory>resources/</directory>
                    </resource>
                  </resources>
                </configuration>
              </execution>
            </executions>
          </plugin>

【问题讨论】:

  • 我不明白这一点:`我不想通过将类移动到 src/test 来丢失现有的修订历史。 ` 这正是版本控制系统打算记录的内容...将您的类/文件移动到正确的位置(src/main/javasrc/test/javasrc/main/resources 和 `src/test/resources 等);你可以摆脱 build-helper-maven-plugin ... 等等。
  • 进一步阅读有关 maven 生命周期的信息,因为mvn clean install package 这意味着您正在重复运行几件事...仅使用mvn clean package ...或者如果您有集成测试,请使用mvn clean verify,但请不要使用install ...
  • @khmarbaise install 命令只是剩下的。通常我通过 maven wildfly 插件运行东西,但我试图在较低级别运行东西以找出我的问题。
  • 通过wildfly运行将无法正确处理事情......据我所知,wildfly插件仅用于部署?
  • @khmarbaise 只是为了澄清这段历史。如果我对文件执行 git mv 它会破坏监管链。我以后所做的任何更改都会被记录下来。但是,如果我想将更改与移动前的某个点进行比较,这是不可能的,因为 git 将移动的资源视为新文件。

标签: java maven jar


【解决方案1】:

上下文

我认为这是 build-helper-maven-plugin 中的一个错误,或者可能是使用 documentation 时的错误打印。 &lt;excludes&gt; 标签被插件完全忽略。

它甚至没有出现在 Eclipse 的代码完成中

解决方案

虽然您不能排除 builder-helper-maven-plugin 中的文件,但您可以排除 maven-compiler-plugin 中的文件。因此,如果您只是将以下配置添加到您的 maven-compiler-plugin 它应该排除 **/test/** 目录

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.8.1</version>
    <configuration>
        <release>11</release>
        <excludes>
            <exclude>**/test/**</exclude>
        </excludes>
    </configuration>
</plugin>

最佳实践

我觉得有义务提醒读者这是 maven 中的 anti-pattern。理想情况下,您将为每个源目录创建单独的 pom 文件,然后将它们作为单独的模块添加到父 pom 文件中。我意识到这可能是一个更大的重构工作

【讨论】:

  • 我认为你是对的。再次查看构建助手插件的文档,我将源代码和资源的示例混合在一起。排除仅适用于资源,它对源没有任何作用。我会用编译器插件试试你的建议,看看是否有帮助。
  • 是的,请报告并告诉我它是否适用于您的用例。我在研究相同的确切问题时遇到了您的问题,而是尝试了这个实现,它对我来说效果很好
猜你喜欢
  • 2012-05-30
  • 1970-01-01
  • 2014-11-22
  • 2016-01-02
  • 2017-11-14
  • 1970-01-01
  • 1970-01-01
  • 2013-07-07
  • 2014-12-07
相关资源
最近更新 更多