当前位置: 首页 > 知识库问答 >
问题:

渐变工件依赖性-工件-如何找到路径

岑鸣
2023-03-14

构建一个Java /Groovy项目,各种任务,如编译Java、编译Groovy、测试等,需要各种jar工件,如果您正确定义了该任务的每个区域所需的内容,Gradle会提供这些工件。

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


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

我的简单问题: - Gradle 构建过程知道如何从 Artifactory 获取工件(正如我在 init.d/common.gradle 文件中提到的那些工件仓库),并且在构建过程中它会使用这些 jar 馈送编译/测试等任务,现在如果我也将这个.xml工件上传到 Artifactory,那么:

一个。如何在 build.gradle 中获取可用的.xml工件,以便我可以对其执行一些操作;例如:将该.xml文件复制到生成的项目的 jar/war 文件中的 x/y/z 文件夹中。我可以通过project.configuration.compile.each或.find或类似的东西访问那些jar文件,但我不确定我是否可以以相同的方式访问.xml文件。以下代码适用于在build/tmpJibx/文件夹中解开jar文件,即如果我在构建过程中需要httpunit-1.1.1.jar那么调用以下函数时,将在build/tmpJibx/httpunit文件夹中创建/取消jar这个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..\文件存储.........*

我所要做的就是:如果我能做到以下几点:

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"
   ...

   ...
   ....

}

似乎我必须首先从Gradle知道的某个位置可以使用的地方复制.xml,然后从该位置复制到我的目标文件夹。

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

岑毅庵
2023-03-14

最简单的解决方案是将XML文件提交给源代码管理。如果您将它放在< code > src/main/WEB app/we b-INF/conf/thatxmlartifactfile . XML 下,它将自动包含在War中。

如果您需要从艺术工厂获取文件,您可以执行以下操作:

configurations {
    jibx
}

dependencies {
    jibx "some.group:someArtifact:1.0@xml"

war {
    from { configurations.jibx.singleFile }
}

PS:直接将文件添加到最终的归档文件中,而不是通过中间的复制步骤,这通常是可能的,也是更可取的。

 类似资料:
  • 等级2.3;影子插件1.2.1。 在我的build.gradle中,我使用shadow插件来重新打包依赖项,如下所示: 我还将shadow jar添加到要发布的工件列表中:

  • 问题内容: Go 1.8支持Go插件。 我创建了两个插件,如下所示。 据我了解,该插件仅公开包中的函数和变量。即对于非变量/函数将失败。 但是我想测试一个插件是否可以在内部从另一个插件调用方法,类似于C ++库如何调用另一个库。 所以我测试如下: plugin1 github.com/vimal/testplugin plugin2 github.com/vimal/testplugin1 这里的

  • 我有自定义缓存控制器服务-CustomCacheService groupid-com.example.service Artifactid-CustomCacheService groupid-com.example.processor Artifactid-QueryCustomCache groupid-com.example.processor artifactid-loadcustomc

  • 我目前正在使用Maven开发一个Java项目。在我的我收到了这个错误。 我添加了这种依赖性 到我的。但错误仍然是一样的。 我是否缺少为依赖项添加存储库?我也没有在我的。 有人能建议我在我的中添加的存储库代码吗?

  • 问题内容: 对于Maven Central(或任何其他给定的Nexus存储库)上的工件,我想列出所有直接依赖项。 最初,我考虑过只阅读pom.xml并从依赖项部分收集所有条目。但是我注意到这些条目可能没有版本(由依赖管理提供),或者这些条目可能来自父poms。 我的第二个想法是建立某种人造Maven项目并使用收集相关性。这可能变得复杂。 什么是最直接(也是可靠)的方法? 问题答案: 在Maven插

  • 我想在Gradle拥有所有可用的依赖构件之后,在将来手动下载依赖构件,因此我想获得Gradle用来下载这些构件的URL。 有没有一种方法可以获得Gradle下载的依赖项的URL?