2015-05-03 26 views
0

之内,并将其依赖关系作为一个单独的jar下载到内部的依赖关系中?将maven依赖关系作为一个单独的.jar下载到

我的使用情况:

下载(org.apache.felix.http.servlet-API:1.1.0),然后将其复制到一个文件夹。

从MVN仓库(http://mvnrepository.com/artifact/org.apache.felix/org.apache.felix.http.servlet-api)可以得到它作为一个单一的罐子。

在本地构建我使用Maven的依赖关系的插件:

  <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而不是作为一个单独的jar,但作为2罐子的。第一个jar是(org.apache.felix.http.servlet-api),第二个jar是tomcat-servlet-api。在依赖关系的依赖列表中提到了这一点。

我怎样才能下载并复制到一个文件夹org.apache.felix.http.servlet-api作为一个单一的jar(与从mvn仓库下载相同的格式)?

谢谢, 彼得

回答

0

这是库没有怎么Maven的工作。就拿众所周知SLF4J project的文件:

http://search.maven.org/#artifactdetails|org.slf4j|slf4j-api|1.7.12|jar

你注意,每个文件进行签名由它的发布者(*。ASC文件),并具有SHA1校验。对二进制文件进行签名可以相信二进制文件是根据其原始源代码构建的,并且校验和使您可以验证二进制文件在传输过程中是否被篡改。

希望这可以解释为什么构建“超级罐子”(包含所有依赖关系的罐子)会由软件的原始发布者完成。如果Maven存储库要“按需”执行此操作,则生成的二进制文件将具有不同的校验和,并且不符合其签名。

不同的意见,但我认为你更好,包括第三方依赖作为离散和单独的文件。它使逆向工程更容易(文件校验和可以用来查找Maven回购并确定项目和版本。我曾经在一个非常古老的Java项目中这样做过),有时候有许可条件允许链接的图书馆,但不包括在内。

结论可执行JAR可以使用“ClassPath”清单条目引用它们的依赖关系。有一个Maven插件,可以帮助你创建一个这样的罐子:

https://maven.apache.org/shared/maven-archiver/examples/classpath.html

PS 还有用于创建uberjars所以很多选项的插件。