Gradle Artifact依赖项 - Artifactory artifact - 如何查找路径

时间:2014-03-14 19:02:35

标签: path find gradle artifactory resolve

构建Java / Groovy项目时,各种任务(如compileJava,compileGroovy,test等)需要各种jar工件,如果您已正确定义了该任务的每个区域所需的内容,Gradle会提供这些工件。

我正在将这些可用于构建脚本(build.gradle),一切正常。


我正在处理的另一个项目,不仅需要jar rtifacts,还需要.xml文件作为进行JIBX / XSLT转换/处理的工件。

我的简单问题: - Gradle构建过程知道如何从Artifactory获取工件(正如我在init.d / common.gradle文件中提到的那些Artifactory存储库),并且在构建期间它将这些jar的编译/测试等任务提供给它们,现在如果我有这个.xml工件也上传到Artifactory,然后:

一个。如何在build.gradle中获取.xml工件,以便我可以对其执行某些操作;例如:将.xml文件复制到结果项目的jar / war文件中的x / y / z文件夹中。我可以通过 project.configurations.compile.each或.find 或类似的东西访问那些jar文件,但我不确定我是否可以以相同的方式访问.xml文件。以下代码适用于在build / tmpJibx /文件夹中解压缩jar文件,即如果我在构建期间需要httpunit-1.1.1.jar,则调用时的以下函数将在build / tmpJibx / httpunit中创建/解压这个jar夹。

// 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知道它可用于某个位置n然后从该位置到我的目标文件夹。

   // 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 个答案:

答案 0 :(得分:3)

最简单的解决方案是将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:通常可以,也更可取的是,将文件直接添加到最终存档,而不是通过中间复制步骤。