是否有一种众所周知的方法来创建一个超级源jar?换句话说,一个项目的所有源代码及其所有依赖项的jar(或至少那些具有-sources.jar的源代码)?
我已经考虑过使用maven-assembly-plugin进行此操作,但使用包含dependencySet
(或*.*.*.sources.*
)的*.sources
并不起作用因为那些实际上不是项目的依赖项,我不想添加所有。
答案 0 :(得分:1)
您可以使用maven-shade-plugin创建超级jar。只需在<build>
代码中包含以下内容 -
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.0.0</version>
<executions>
<execution>
<id>source-jar</id>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<createSourcesJar>true</createSourcesJar>
<artifactSet>
<includes>
<include>...</include>
</includes>
</artifactSet>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
要修改配置,您可以在org.apache.maven.plugins.shade.resource
包中使用Resource Transformers。
要定义jar的内容,您可以在过滤器中进一步使用includes and excludes。
答案 1 :(得分:0)
我在working with sources in the maven-dependency-plugin找到了一些信息。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>src-dependencies</id>
<goals>
<goal>unpack-dependencies</goal>
</goals>
<phase>prepare-package</phase>
<configuration>
<classifier>sources</classifier>
<failOnMissingClassifierArtifact>false</failOnMissingClassifierArtifact>
<outputDirectory>${project.build.directory}/sources</outputDirectory>
<includeGroupIds>{your group prefix}</includeGroupIds>
<includes>**/*.java</includes>
<includeScope>runtime</includeScope>
</configuration>
</execution>
因此,如果我这样做,然后运行引用解压缩文件的maven-assembly-plugin,我可以分两步完成。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<execution>
<id>uber-source</id>
<goals>
<goal>single</goal>
</goals>
<phase>package</phase>
<configuration>
<descriptors>
<descriptor>ubersource.xml</descriptor>
</descriptors>
<outputDirectory>${deploy.internal.directory}</outputDirectory>
<finalName>${project.artifactId}</finalName>
</configuration>
</execution>
</executions>
</plugin>
在汇编描述符ubsersource.xml中设置文件:
<fileSet>
<directory>${project.build.directory}/sources</directory>
<outputDirectory>.</outputDirectory>
</fileSet>
然后我得到了我的超级源罐......
maven-assembly-plugin和maven-dependency-plugin处理sources
的方式可能有一个细微的区别。如果在程序集描述符的sources
中引用分类器dependencySet
,它会查找pom中实际依赖项的源 - 这不是很有用。但是,在maven-dependency-plugin中,引用sources
分类符意味着 依赖项的源。因此,这个解决方案的工作原理。
我还使用mojo-executor将它包装在我自己的插件中以使其单步执行,并在我的pom中单独声明,但这是可选的
这是一个更多的pom代码,但我比maven-shade-plugin更喜欢它,因为它只是我想要的,仅此而已。