分发插件资源文件到宿主项目

Distribute plugin resource files to host project

我有一个公开 Mojo 的 Maven 插件,其目标是在编译阶段运行。该项目是使用 mvn archetype:generate 生成的,POM 包含 运行 附带的所有标准内容,偏差很小。该项目包括几个资源文件,例如filea.txt 和 fileb.txt,作为 jar 的一部分打包。

在项目中使用该插件时,我希望将jar 中包含的文件提取并复制到宿主项目的target\test-classes 目录中。我正在尝试使用插件 jar 来分发一些文件 + 公开一些可以使用这些文件的功能。

这是一种有效的方法吗?如果是,我是否可以将设置添加到插件 POM 中以指示应从插件中提取和复制内容?我想将此逻辑集中在插件中,而不必在插件主机中进行。

我觉得这与 maven-dependency-plugin 或 maven-resources-plugin 或 build-helper-maven-plugin:attach-artifact 有关,尝试了几种不同的方法,但我认为我遗漏了一些明显的东西:

例如插件 POM 中有这样的东西吗?

  <plugins>
    <plugin>
      <artifactId>maven-clean-plugin</artifactId>
      <version>3.1.0</version>
    </plugin>
    <plugin>
      <artifactId>maven-resources-plugin</artifactId>
      <version>3.0.2</version>
      <configuration>
        <outputDirectory>${basedir}/target/test-classes</outputDirectory>
        <resources>
          <resource>
            <directory>src/main/resources</directory>
            <includes>
              <include>filea.txt</include>
              <include>fileb.txt</include>
            </includes>
          </resource>
        </resources>
      </configuration>
    </plugin>
    <plugin>
      <artifactId>maven-compiler-plugin</artifactId>
      <version>3.8.0</version>
    </plugin>
    <plugin>
      <artifactId>maven-plugin-plugin</artifactId>
      <version>3.6.0</version>
    </plugin>
    // etc etc

Google fu 让我失望了,一直在 maven 资源页面上结束。如果需要,可以 post 目录结构/更多信息。

干杯

首先,我建议将需要分发的资源放入 src/main/resources 中,这看起来您已经完成了...但是删除 maven-resources-plugin 的配置并让 maven 完成它的工作。这会自动复制到 target/classes/ 中,结果稍后会打包到生成的 jar 中。

如果您的插件需要获取这些文件,这些文件可以通过 this.getClass().getResourcesAsStream("/...") 作为常规资源访问,并将它们读写到新位置,最好是 target/...