【发布时间】:2014-06-06 14:50:35
【问题描述】:
我对 Maven 和 Jenkins 合作有点陌生。
我有一个构建 JAR 的项目,该 JAR 及其附带文件(pom、sha1、md5 等)通过 Jenkins 可以托管的 Maven 存储库提供。当我导航到我的构建机器时,我可以看到这些文件,例如:
http://myhostname:8080/plugin/repository/everything/com/example/projectname/0.7/
我团队的一个成员有一个其他项目需要的阴影 JAR 的构建目标。我也想把这个带阴影的 JAR 放到 Maven 存储库中。在 pom.xml 中,这一行控制阴影 JAR 的名称:
<finalName>${project.artifactId}-${project.version}-with-dependencies</finalName>
在我的项目中,我可以做到:
"com.example" % "projectname-with-dependencies" % "0.7" (I suspect - yes?)
这对我来说似乎没问题 - 关于我如何告诉 Jenkins 将此 JAR 从目标文件夹中取出(在构建完成后正确放置的位置)并使其在 Maven 存储库中可用以供其他人使用的任何线索项目?
我希望这是有道理的,我可以得到一点成人的监督;)
编辑 - 根据要求,该部分中 pom.xml 的相关部分:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.2</version>
<executions>
<execution>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<finalName>${project.artifactId}-${project.version}-with-dependencies</finalName>
<createDependencyReducedPom>false</createDependencyReducedPom>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.example.projectname.Projectname</mainClass>
</transformer>
<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/spring.handlers</resource>
</transformer>
<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/spring.schemas</resource>
</transformer>
<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/spring.tooling</resource>
</transformer>
</transformers>
<filters>
<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
</excludes>
</filter>
</filters>
</configuration>
</execution>
</executions>
</plugin>
【问题讨论】:
-
阴影 JAR 是如何构建的?它也是一个maven项目吗?
-
这是 pom.xml 文件中的一个目标。 JAR 与项目的 JAR 一起放在目标目录中。也就是说,目标目录有 project-0.7.jar 和 project-0.7-with-dependencies.jar,我希望这两个都可以通过 Jenkins 的 Maven 存储库获得。
-
所以我假设 maven 安装实际上只安装项目 jar,而不是阴影 jar?
-
正确。阴影 JAR 已构建,但看起来就是这样。
-
你能发布用于阴影 jar 项目的 pom.xml 文件吗?我想知道您是否只是没有将 maven-shade-plugin 作为 Jenkins 正在运行的正确阶段的一部分运行。