【发布时间】:2020-02-06 13:32:52
【问题描述】:
我有一个暴露 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 资源页面结束。如果需要,可以发布目录结构/更多信息。
干杯
【问题讨论】:
-
首先我建议将需要分发的资源放入
src/main/resources,看起来你已经完成了......但是删除 maven-resources-plugin 的配置并让 maven 完成它的工作.这会自动复制到target/classes/中,结果会在稍后打包到生成的 jar 中...如果您的插件需要获取那些可以通过this.getClass().getResourcesAsStream("/...")作为常规资源访问的文件,并将它们读写到一个新的位置更可取进入target/...... -
是的@khmarbaise,我对打包好的 jar 很满意——有我需要的文件。啊,好的,只要这些文件在 jar 中,我就应该能够在我的 Mojo 代码中使用 this.getClass().getResourcesAsStream("/...") 并做我需要做的任何事情,这将起作用来自托管插件的项目?让我试一试
-
@khmarbaise 谢谢 - 这让我回到了正轨,远离了我要走的兔子洞。只需在将 getResourceAsStream 与 jar 一起使用时以正确的方式引用文件,并且能够复制到目标目录。如果您将评论更改为答案,我会接受。
-
说完了。感谢您的反馈。
标签: java maven maven-plugin