如何从已发布的清单中构建胖罐子

  • 本文关键字:单中 构建 罐子 java maven
  • 更新时间 :
  • 英文 :


我有一个部署过程,gradle为一些微服务发布了一组jar文件。这会在存储库中生成如下所示的工件:

pkg     service-1.0.0.jar
javadoc service-1.0.0-javadoc.jar
pom     service-1.0.0.pom
sources service-1.0.0-sources.jar

如果有人想在自己的项目中使用service-1.0.0.jar,并获取所有依赖项等,这是非常棒的。不过,我现在正试图在此基础上构建一个Docker镜像。像java -jar service-1.0.0.jar这样简单的东西。

问题是jar不是一个带阴影的jar,它缺少一堆依赖项。有没有一种合适的方法来获取jar运行所需的所有依赖关系?

我从这个开始:

curl -u "..." "https://...service-1.0.0.pom" > pom.xml
mvn install dependency:copy-dependencies

这看起来很有希望,但它遇到了一个障碍,它试图从私人存储库下载依赖项(从技术上讲,与pom来自同一个存储库(。

我真的不想为了注入distributionManagement节或类似的东西而侵入pom文件。有什么聪明的办法吗?在命令行上告诉maven如果在maven central找不到什么东西,就搜索私有存储库?

或者有没有一种更好的方法来处理这个问题(不把原作作为一个肥罐子发布——我想避免这样(?

我认为您只需要将您的私人存储库(或它们的列表(添加到您的${user.home}/.m2/settings.xml(都在Linuxwindows上(-(更多关于引导多个存储库的信息(

当配置了多个存储库时,maven将搜索所有存储库,包括私有存储库。在这种情况下,无需修改pom.xml。缺点是,您将看到每个.jar都将查询拉到所有这些存储库。

如果您所在的公司有权访问Apache Archiva/Nexus/Artifactory,您可以配置一组存储库,该组将由所有公共和私有存储库组成,然后您的maven配置将只在一个位置查找,该位置还将缓存所有这些包。

尝试:

buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.github.jengelman.gradle.plugins:shadow:2.0.1'
}
}
apply plugin: 'java'
apply plugin: 'com.github.johnrengelman.shadow'

应用shadow插件后,shadowJar任务将可用。这应该创建一个jar,其中包含jar内部lib/文件夹中的所有依赖项。

最新更新