如何将mvn依赖项作为嵌入依赖项的单个jar进行下载?
我的用例:
Downloading(org.apache.felix.http.servlet-api:1.1.0),然后将其复制到文件夹中。
从MVN存储库(http://mvnrepository.com/artifact/org.apache.felix/org.apache.felix.http.servlet-api)可以将其作为单个jar获取。
在本地构建中,我使用maven-dependency plugin:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.10</version>
<executions>
<execution>
<id>copy</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>/Users/user/dev/fun/felix-framework-5.0.0/bundle</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>false</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
</configuration>
</execution>
</executions>
</plugin>现在,它将org.apache.felix.http.servlet-api复制为2个jar,第一个jar是(org.apache.felix.http.servlet-api),第二个jar是tomcat-servlet-api。它在我的依赖项的依赖项列表中提到。
如何才能将org.apache.felix.http.servlet-api作为单个jar下载并复制到文件夹中(与从mvn存储库下载的格式相同)?
发布于 2015-05-03 18:00:54
这不是Maven存储库的工作方式。以大家熟知的SLF4J project文件为例:
http://search.maven.org/#artifactdetails|org.slf4j|slf4j-api|1.7.12|jar
您会注意到,每个文件都由它的发布者(*.asc文件)签名,并且有一个SHA1校验和。对二进制文件进行签名可以信任该二进制文件是从其原始源代码生成的,而校验和使您能够验证该二进制文件在传输过程中未被篡改。
希望这能解释为什么构建"uber jar“(包含所有依赖项的jar)应该由软件的原始发行者完成。如果Maven存储库“按需”执行此操作,则生成的二进制文件将具有不同的校验和,并且与其签名不匹配。
虽然意见不一,但我认为将第三方依赖项作为离散和独立的文件包含在其中会更好。它使您的依赖项的反向工程变得容易得多(文件校验和可用于查找Maven存储库并确定项目和版本。我曾经在一个非常老的Java项目上这样做过),有时许可条件允许链接库,但不允许包含。
总之,可执行jars可以使用"ClassPath“清单条目引用它们的依赖项。有一个Maven插件可以帮助你创建这样一个jar:
https://maven.apache.org/shared/maven-archiver/examples/classpath.html
PS还有一个用于创建uberjars的插件,所以有很多选择。
https://stackoverflow.com/questions/30012307
复制相似问题