gradle - 如何在 jar 中声明 jar 的依赖关系
Posted
技术标签:
【中文标题】gradle - 如何在 jar 中声明 jar 的依赖关系【英文标题】:gradle - how to declare a dependency of a jar in a jar 【发布时间】:2011-03-27 14:50:57 【问题描述】:使用 gradle,我正在使用来自档案存储库的构建。其中一个罐子(javax.jms_1.1.0.200810061358.jar
)具有以下内容:
about.html
about_files
LICENSE.txt
jms.jar
META-INF
MANIFEST.MF
我需要的jar其实就是这个javax.jms_1.1.0.200810061358.jar
里面的jms.jar
我能够使用这个 jar 的唯一方法是拉 jms.jar
从存储库的javax.jms_1.1.0.200810081358.jar
中取出并保存
到文件系统并通过以下方式使用它:
repositories flatDir: my_dir_with_jms.jar_in_it
gradle 列表中的某个人建议使用 Ivy 打包器解析器。
我看了这个link 并且是 离开很迷茫。我确实有像这样设置的其他常春藤解析器:
addIvyPattern 'http://archivaserver:8080/archiva/repository/osgi-internal/[organisation]/[module]/[revision]/ivy_[revision].xml'
addArtifactPattern
"http://archivaserver:8080/archiva/repository/osgi-official/[organisation]/[organisation]/[module]_[revision](-[classifier]).[ext]"
有谁知道解决这个问题的好方法吗?
【问题讨论】:
【参考方案1】:解决依赖关系中的依赖关系需要使用常春藤packager resolver。
我从未在 Gradle 中配置过包解析器,但我认为它的工作原理类似于以下内容(参考 webpage)
repositories
add(new org.apache.ivy.plugins.resolver.packager.PackagerResolver())
name = 'local Ivy packagers'
buildRoot = file("$gradle.gradleUserHomeDir/packager/build")
resourceCache = file("$gradle.gradleUserHomeDir/packager/cache")
addIvyPattern "file:///$project.rootDir/ivy/[organisation]/[module]/[revision]/ivy.xml"
addArtifactPattern "file:///$project.rootDir/ivy/[organisation]/[module]/[revision]/packager.xml"
dependencies
compile group: 'org.myorg', name: 'jms', version: '1.1.0.200810061358'
解析器需要以下文件来声明依赖项:
ivy/org.myorg/jms/1.1.0.200810061358/ivy.xml
ivy/org.myorg/jms/1.1.0.200810061358/packager.xml
ivy.xml
描述模块,在这种情况下声明发布了哪些工件:
<ivy-module version="2.0">
<info organisation="org.myorg" module="jms" revision="1.1.0.200810061358" status="release"/>
<publications>
<artifact name="jms" type="jar"/>
</publications>
</ivy-module>
packager.xml
描述封闭档案的位置以及如何提取 jms.jar 的说明:
<packager-module version="1.0">
<resource dest="archive" url="http://archivaserver:8080/archiva/repository/??/javax.jms_1.1.0.200810061358.jar" sha1="????"/>
<build>
<move file="archive/jms.jar" tofile="artifacts/jars/jms.jar"/>
</build>
</packager-module>
build 标签下的内容用于生成 ANT 脚本。更多详情请阅读ivy documentation的“包装说明”部分
【讨论】:
以上是关于gradle - 如何在 jar 中声明 jar 的依赖关系的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Gradle 构建名称中没有“-SNAPSHOT”的 jar?
Spring Boot + Gradle:如何构建可执行jar
如何在 Gradle 中使用带有混淆 jar 的 Launch4J