Зависимость артефакта Gradle - Артефактный артефакт - Как найти путь
При создании проекта Java/Groovy для различных задач, таких как compileJava, compileGroovy, test и т. Д., Требуются различные артефакты jar, которые предоставляет им Gradle, если вы правильно определили, что вам нужно для каждой области этой задачи.
Я делаю их доступными для сценария сборки (build.gradle), и все работает нормально.
Один из моих других проектов, над которыми я работаю, требует не только jar-артефактов, но и XML-файла в качестве артефакта для выполнения преобразования / обработки JIBX / XSLT.
Мой простой вопрос: - Процесс сборки Gradle знает, как извлекать артефакты из Artifactory (как я уже упоминал об этих репозиториях Artifactory в файле init.d / common.gradle), и во время сборки он теперь передает задачи компиляции / тестирования и т. Д. С этими jar если у меня есть этот XML-артефакт, загруженный также в Artifactory, то:
а. Как я могу получить артефакт.xml, доступный мне в build.gradle, чтобы я мог выполнить с ним некоторую операцию; Например: скопируйте этот XML-файл в папку a x/y/z в файле jar/war полученного проекта. К этим jar-файлам я могу получить доступ через project.configurations.compile.each или.find или что-то в этом роде, но я не уверен, что могу получить доступ к XML-файлу таким же образом. Следующий код прекрасно работает для отмены использования jar-файла в папке build/tmpJibx/, т. Е. Если во время сборки мне нужен httpunit-1.1.1.jar, то следующая функция при вызове создаст / разархивирует этот jar-файл в build/tmpJibx/httpunit папка.
// Unpack jar
def unpackJarItem( jarName ) {
println 'unpacking: ' + jarName
def dirName = "$buildDir/tmpJibx/$jarName"
new File( dirName ).mkdirs()
project.configurations.compile.find {
def nameJar = it.name
def iPos = nameJar.lastIndexOf( '-' )
if( iPos > 0 ) {
nameJar = nameJar.substring( 0, iPos )
if( nameJar == jarName ) {
def srcJar = it.toString()
ant {
unjar( src: "$srcJar", dest: "$dirName" )
}
}
}
}
}
Gradle поддерживает артефакты в своем кэше в пользовательском ~(домашний каталог внутри ~/.gradle) или C:\Users\.gradle в...\caches..\artifactory..\filestore.........*
Все, чего я пытаюсь достичь, это: Если я могу сделать что-то вроде ниже:
copy {
into "build/war/WEB-INF/conf"
from "......<THIS_PATH_IS_WHAT_Im_LOOKING_FOR>:
include "thatxmlartifactfile.xml"
}
Я попытался определить запись в разделе зависимостей {...}, как показано ниже, но я не уверен, будет ли Gradle автоматически каким-то образом иметь к нему доступ, так как Gradle настолько хорош.
dependencies {
compile 'groupid:artifactid:x.x.x'
compile group: 'xxxx', artifac...: 'yyyy', version: 'x.x.x'
//for ex:
compile 'httpunit:httpunit:1.1.1'
jibxAnt 'groupidnameofxmlfile:artifactidnameofxmlfile:versionnumberofxml@xml"
...
...
....
}
Кажется, мне нужно сначала скопировать этот XML-файл, откуда Gradle знает, что он доступен в каком-то месте, а затем из этого места в мою целевую папку.
// Add libraries for acceptance tests
project.configurations.acceptanceTestCompile.each { File f ->
if( f.isFile() ) {
def nameJar = f.getName()
def jarName = f.getName()
def fileInc = true
def iPos = nameJar.lastIndexOf( '-' )
if( iPos > -1 ) {
jarName = nameJar.substring( 0, iPos )
// Here I can say that one of the file/entry will be that .xml file
// Now I have that in jarName variable and I can play with it, right?
// i.e. if jarName == name of that xml file, then
copy {
into "some/folder/location"
from jarName
}
}
}
}
1 ответ
Самое простое решение - передать файл XML в систему контроля версий. Если вы положите его под src/main/webapp/WEB-INF/conf/thatxmlartifactfile.xml
, он будет включен в войну автоматически.
Если вам нужно получить файл из Artifactory, вы можете сделать это следующим образом:
configurations {
jibx
}
dependencies {
jibx "some.group:someArtifact:1.0@xml"
war {
from { configurations.jibx.singleFile }
}
PS: часто возможно, а также предпочтительно, добавлять файлы непосредственно в окончательный архив, а не проходить промежуточные этапы копирования.