分发插件资源文件到宿主项目
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/...
我有一个公开 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/...