题
使用 gradle,我正在使用 archive 存储库中的构建。其中一个罐子(javax.jms_1.1.0.200810061358.jar
) 的内容如下:
about.html
about_files
LICENSE.txt
jms.jar
META-INF
MANIFEST.MF
我需要的jar其实就是这个里面的jms.jar javax.jms_1.1.0.200810061358.jar
我唯一能够消耗这个罐子的方法是将JMS.Jar从存储库中拉出 javax.jms_1.1.0.200810081358.jar
并将其保存到文件系统并通过:
repositories { flatDir: my_dir_with_jms.jar_in_it}
gradle 列表中的某人建议使用 Ivy 打包解析器。
我看了这个 关联 并感到非常困惑。我确实有其他常春藤解析器设置如下:
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]"
有人知道这个问题有一个好的解决方案吗?
解决方案
解决依赖项内部的依赖项需要使用 ivy 打包解析器.
我从未在 Gradle 中配置过包解析器,但我认为它会像下面这样工作(参考 网页)
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
常春藤.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>
打包器.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>
下的内容 建造 标签用于生成 ANT 脚本。有关更多详细信息,请参阅“包装说明”部分 常春藤文档
不隶属于 StackOverflow