【问题标题】:Distribute plugin resource files to host project分发插件资源文件到宿主项目
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-22
    相关资源
    最近更新 更多