当前位置: 首页 > 知识库问答 >
问题:

将maven dependency作为单个文件下载。jar中包含它的依赖项

杨飞飙
2023-03-14

如何将mvn依赖项作为一个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。阿帕奇。菲利克斯。http。servlet api不是作为一个jar,而是作为两个jar。第一个jar是(org.apache.felix.http.servlet api),第二个jar是tomcat servlet api。这在我的依赖项列表中提到。

我怎样才能下载并复制到一个文件夹组织。阿帕奇。菲利克斯。http。servlet api作为单个jar(与从mvn存储库下载的格式相同)?

共有1个答案

唐康安
2023-03-14

Maven存储库不是这样工作的。以著名的SLF4J项目的文件为例:

http://search.maven.org/#artifactdetails|组织。slf4j | slf4j api | 1.7.12 | jar

您注意到每个文件都由它的发布者(*. asc文件)签名,并有一个SHA1校验和。签名二进制文件可以信任二进制文件是由其原始源代码构建的,校验和可以验证二进制文件在传输过程中没有被篡改。

希望这能解释为什么软件的原始发行商会建造“优步罐子”(包含所有依赖项的罐子)。如果Maven存储库“按需”执行此操作,则生成的二进制文件将具有不同的校验和,并且与签名不匹配。

意见不一,但我认为最好将第三方依赖项作为离散和独立的文件来包含。这使得逆向工程你的依赖项变得容易得多(文件校验和可以用来查找Maven回购并确定项目和版本。我曾经在一个非常古老的Java项目中不得不这样做),有时有许可条件允许链接库,但不允许包含。

总之,可执行罐可以使用“类路径”清单条目引用它们的依赖关系。有一个Maven插件可以帮助您创建这样一个罐:

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

PS还有一个创建uberjars的插件,有很多选择。

 类似资料:
  • 我正在开发一个Java项目,使用maven作为依赖项管理器/构建工具。我当前在将依赖项的依赖项解析到正确版本时遇到问题。 有问题的依赖项称为JasperReports-Functions-6.1.0.jar,它不是托管在maven repo中,而是以jar形式提供的。 如何强制jar依赖项使用子依赖项的某个版本?

  • 好的,这是我第一次尝试Java web start,所以我有了用Maven构建的jar作为依赖项存储库,并将其放入Apache根文件夹,包括文件夹库中的所有依赖项jar,然后我创建了密钥存储、HTML和JNLP文件。 我启动了Apache服务,并尝试访问localhost,它运行得很顺利,直到我用浏览器的java插件运行了jnlp文件,显示,我知道我的依赖项JAR不包括在内。所以我发现了如何在Ja

  • 问题内容: 有没有一种方法可以强制maven(2.0.9)将所有依赖项包含在单个jar文件中? 我有一个构建到单个jar文件中的项目。我希望将依赖项中的类也复制到jar中。 更新:我知道我不能只在jar文件中包含jar文件。我正在寻找一种方法来解压缩指定为依赖项的jar,并将类文件打包到我的jar中。 问题答案: 你可以使用带有描述符的插件来执行此操作。这是我们之一的相关块,它可以完成此任务:

  • 问题内容: 摘要: 我有一个依赖于JAR文件的AAR文件,当我构建AAR项目时,它不包含JAR代码。 细节: 我有一个Java SDK库项目,其中包含我们用于Java Web项目的代码,此类库是使用内部Nexus服务器(如JAR)创建的,并驻留在内部。 目的是通过一个AAR库提供此JAR库的“ Android配置”版本,多个Android应用程序可以使用该版本,并最大程度地减少了实现它的工作量(和

  • 摘要: 我有一个AAR文件,它依赖于一个JAR文件,当我构建AAR项目时,它不包含JAR代码。 我的AAR项目包含了Java SDK库(JAR)的gradle依赖项,但在构建时,AAR不包含来自它的任何类。 代码: 这是Java SDK项目的gradle文件: 注意2:我尝试在Android项目中添加到我的AAR依赖项,但这没有解决任何问题,真正的问题是在构建AAR项目时,JAR项目代码没有被捆绑