使用build helper maven插件从jar中排除文件

a0zr77ik  于 2021-07-08  发布在  Java
关注(0)|答案(1)|浏览(654)

我有一些与测试相关的类,我想从项目的编译jar输出中排除这些类。这是一个遗留项目,我不想因为将类移动到src/test而丢失现有的修订历史。因为我已经在使用buildhelpermaven插件了,我想我可以在那里指定一个排除模式,但是到目前为止,我尝试过的一切似乎都不起作用。我跑了
mvn清洁安装包
在我的项目根目录中,我看到了日志消息
[信息]——构建助手maven-plugin:3.0.0:add source(add source)@person ejb---[info]源目录:/media/psf/home/documents/workspace/optics/optics/person/ejb/src added。
但是当我查看编译后的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>
wf82jlnq

wf82jlnq1#

上下文

我相信这是build helper maven插件中的一个bug,或者可能是使用文档中的一个打印错误。这个 <excludes> 标签被插件完全忽略。
它甚至没有出现在eclipse的代码完成中

解决方案

虽然不能排除builder helper maven插件中的文件,但可以排除maven编译器插件中的文件。因此,如果您简单地将以下配置添加到maven编译器插件中,它应该排除 **/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的反模式。理想情况下,您应该为每个源目录创建单独的pom文件,然后将它们作为单独的模块添加到父pom文件中。不过,我意识到这可能是一个更大的重构工作

相关问题