【问题标题】:How do I embed artifact information in maven shaded jar如何在 Maven 阴影 jar 中嵌入工件信息
【发布时间】:2016-11-01 00:08:14
【问题描述】:

我想在阴影 jar 中记录 maven 工件实际上最终在那个阴影 jar 中。

所有的包都被合并了,这使得仅仅通过查看 jar 就很难准确地确定其中包含哪些工件。

我认为该信息的理想位置是清单文件,但它可能只是在文本文件中。

理想情况下,我希望查看 groupId、artifactId 和版本。

maven shade 插件可以实现吗?

提前致谢,菲尔。

【问题讨论】:

  • 除了阴影插件本身之外,您不太可能从其他任何地方获得此类信息。所以我会研究它的configuration properties。例如,选项createDependencyReducedPom 可以与keepDependenciesWithProvidedScope 结合使用以获取修改后的 pom.xml,其中包含标记为provided 范围的依赖项。不过,我看不出有办法将它们与最初的 provided 依赖项区分开来。

标签: java maven jar maven-shade-plugin


【解决方案1】:

您可以使用 maven 执行此操作,请按照以下步骤操作:

1- 在 src/main/resources 下创建一个包含信息的文件,例如 information.txt,内容如下:

version=${project.version}
artifactId=${project.artifactId}
groupId=${project.groupId}

2- 激活 Maven 过滤

 <project>
      ...
      <build>
        ...
        <resources>
          <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
            <includes>
                <include>**/information.txt</include>
            </includes>
          </resource>
          ...
        </resources>
        ...
      </build>
      ...
    </project>

3- 构建您的项目。该文件现在将包含您需要的信息。

More information about the plugin.

【讨论】:

  • 这允许将任何属性打印到文本文件并将其包含在最终的 jar 中。但这并没有解释如何找出哪些工件成为阴影 jar 的一部分,当可以以多种不同方式配置阴影插件以仅包含一些工件甚至重新定位内容时。
【解决方案2】:

由于阴影插件不支持此功能,我已请求此功能。 https://issues.apache.org/jira/browse/MSHADE-236

【讨论】:

    【解决方案3】:

    使用 Maven 构建 jars 时,默认情况下您将获得以下条目:/META-INF/maven/${groupId}/${artifactId}/pom.properties/META-INF/maven/${groupId}/${artifactId}/pom.xml。着色时,所有这些文件也将在着色的 jar 中结束。

    【讨论】:

      猜你喜欢
      • 2015-10-26
      • 2023-04-06
      • 1970-01-01
      • 2018-05-03
      • 2015-05-31
      • 2021-11-14
      • 1970-01-01
      • 2020-12-11
      • 1970-01-01
      相关资源
      最近更新 更多