Зависимость артефакта 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: часто возможно, а также предпочтительно, добавлять файлы непосредственно в окончательный архив, а не проходить промежуточные этапы копирования.

Другие вопросы по тегам