我有一个Maven
项目 Foo ,它使用maven-shade-plugin
来打包一个包含所有依赖项的webstart胖jar。
<plugin>
<artifactId>maven-shade-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<finalName>foo-fat</finalName>
...
另一个项目是 Bar ,这是一个Web应用程序,除其他外,还分发Foo webstart。我需要将foo-fat.jar复制到Bar临时预包目录中,为此,我使用maven-dependency-plugin
:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy</id>
<phase>prepare-package</phase>
<goals>
<goal>copy</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>my-group</groupId>
<artifactId>foo</artifactId>
<outputDirectory>...</outputDirectory>
</artifactItem>
</artifactItems>
</configuration>
</execution>
</executions>
</plugin>
问题是,这并没有获取foo-fat.jar但是Foo生成了一个简单的jar foo.jar,它不包含依赖项。可能需要注意的是,Foo在本地仓库中唯一的工件是纤薄的罐子,我无法通过运行任何Maven生命周期来获得胖罐。在Foo中直接运行mvn clean package
会打包一个胖jar,但不会在Bar的pom.xml中调用,如上所示。
如何让maven-dependency-plugin使用不同的项目工件,例如由shade插件制作的胖罐?
答案 0 :(得分:3)
Foo class 能够在使用maven install或maven包时生成 fat jar ,你需要使用maven-shade-plugin,你已经使用了除了关键步骤之外,确保在其配置中使用shadedClassifierName。 例如:
<artifactId>maven-shade-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<shadedClassifierName>shaded</shadedClassifierName>
<shadedArtifactAttached>true</shadedArtifactAttached>
</configuration>
</execution>
</executions>
然后在 Bar class 中为了包含胖子Foo类,你需要使用 maven-dependency-plugin 复制目标并确保使用着色分类器
注释artifactItem例如:
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>copy</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/temp</outputDirectory>
<artifactItems>
<artifactItem>
<groupId>...</groupId>
<artifactId>...</artifactId>
<version>${project.version}</version>
<type>jar</type>
<classifier>shaded</classifier>
</artifactItem>
</artifactItems>
</configuration>
</execution>
</executions>
</plugin>
答案 1 :(得分:2)
Re:&#34; 这个[Bar] [...]让Foo生成一个简单的jar foo.jar &#34; - 你确定这不是以前的Foo版本吗?由于dependency:copy
只是:
...将工件库列表从存储库复制到定义的位置
和re:&#34; 当[Foo]从Bar的pom.xml调用时,如上所示&#34; - 你不能调用&#34;,即从另一个项目运行项目的构建(但是从聚合器/多模块项目或使用Maven Invoker Plugin或Groovy或Ant运行脚本等。)
现在回答的想法(没有尝试过):
在Foo的dev
阶段使用install:install-file,让...
# Start a new feature branch
#hg update dev
#hg update release
hg branch dev # <--- changed
hg branch feature-02
...
成为真正的&#34;本地仓库中的工件,并在Bar的abort: a branch of the same name already exists
声明中使用。