Gradle - Como declarar uma dependência de uma jarra em uma jarra
Pergunta
Usando a gradle, estou consumindo uma construção de um repositório de arquiva. Um dos frascos (javax.jms_1.1.0.200810061358.jar
) tem o seguinte conteúdo:
about.html
about_files
LICENSE.txt
jms.jar
META-INF
MANIFEST.MF
O frasco que eu preciso é realmente o jms.jar dentro disso javax.jms_1.1.0.200810061358.jar
A única maneira de consumir esse frasco é puxando JMs.jar para fora do repositório do repositório javax.jms_1.1.0.200810081358.jar
e salvando -o no sistema de arquivos e consumindo -o por meio de:
repositories { flatDir: my_dir_with_jms.jar_in_it}
Alguém na lista Gradle sugeriu usar um resolvedor de Ivy Packager.
Eu olhei para isso link e ficou muito confuso. Eu tenho outros resolvedores de hera configurados assim:
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]"
Alguém conhece uma boa solução para isso?
Solução
Resolver uma dependência dentro de uma dependência exigiria o uso da hera resolvedor de packager.
Eu nunca configurei o resolvedor do pacote de dentro de Gradle, mas acho que funcionaria algo como o seguinte (referenciando página da Internet)
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'
}
O resolvedor requer os seguintes arquivos para a dependência declarada:
ivy/org.myorg/jms/1.1.0.200810061358/ivy.xml
ivy/org.myorg/jms/1.1.0.200810061358/packager.xml
Ivy.xml
Descreve o módulo e, neste caso, declara quais artefatos são publicados:
<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
Descreve onde está localizado o arquivo anexo e as instruções sobre como extrair 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>
O conteúdo sob o construir A tag é usada para gerar um script de formigas. Para mais detalhes, leia a seção "Instruções de embalagem" do documentação da hera