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

当工件名称与模块名称不同时,使用Grab下载Ivy依赖项Jar

阚英武
2023-03-14

在Jenkinsgroovy脚本中,我尝试使用以下内容下载依赖项:

@Grab(group='myorg', module='SuiteCreator', version='1.16.1', conf='jar', transitive=false)
import myorg.myorgAPI

我有一个 /home/jenkins/.groovy/grapeConfig.xml文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<ivy-settings>
    <settings defaultResolver="downloadGrapes"/>
    <resolvers>
        <chain name="downloadGrapes">
            <sftp user="admin" userPassword="pw" host="ivy.myorg.com" name="myrepository" checkmodified="true">
                <ivy pattern="/data/ivy/repo/[organisation]/[module]/[branch]/[revision]/ivy-[revision].xml"/>
                <artifact pattern="/data/ivy/repo/[organisation]/[module]/[branch]/[revision]/[artifact]-[revision].[ext]"/>
            </sftp>
        </chain>
    </resolvers>
</ivy-settings>

常春藤-1.16.1。我试图获取的模块的xml:

<?xml version="1.0" encoding="UTF-8"?>
<ivy-module version="1.0">
    <info organisation="myorg" module="SuiteCreator" branch="master" revision="1.16.1" status="release" publication="20190417105814"/>
    <configurations>
        <conf name="jar" description="Distribution jar"/>
    </configurations>

    <publications>
        <artifact name="myorg-suitecreator" type="jar" ext="jar" conf="jar"/>
    </publications>
</ivy-module>

所以我只是想抓住这个工件:myorg-suitecreator-1.16.1。罐子

当我在Jenkins运行我的groovy脚本时,我得到以下错误:

2019.07.09 18:06:15org.codehaus.groovy.control.MultipleCompilathtml" target="_blank">html" target="_blank">ionErrorsException:启动失败:2019.07.09 18:06:15转换过程中的一般错误:抓取葡萄错误-[下载失败:myorg#SuiteCreator#master; 1.16.1! SuiteCreator.jar]2019.07.09 18:06:15 2019.07.09 18:06:15java.lang.运行异常:抓取葡萄错误-[下载失败:myorg#SuiteCreator#master; 1.16.1! SuiteCreator.jar]2019.07.09 18:06:15sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)

从错误来看,Grape似乎假设Ivy工件名称与模块名称相同。常春藤-1.16.1。位于:/ivy module/publications/Artifact/@Name的xml工件名称定义为myorg suitecreator,但Grab似乎试图下载:suitecreator。罐子

grapeConfig.xml中的工件模式是:

<artifact pattern="/data/ivy/repo/[organisation]/[module]/[branch]/[revision]/[artifact]-[revision].[ext]"/>

因此,我试图获取的文件实际上是:/data/ivy/repo/myorg/SuiteCreator/1.16.1/myorg-SuiteCreator-1.16.1。罐子

有人对如何使其工作有任何建议吗(或者Grab是否可以将具有不同工件名称的工件从Ivy下载到模块名称?)。

共有1个答案

越国源
2023-03-14

我放弃了使用Grab来实现这一点。我发现Grab的另一个限制是,它不允许指定要检索的工件的分支。我意识到,在主分支或单个发布分支上没有发布可能不是最佳实践,但我们在开发环境中确实有这一要求。

蚂蚁的构造。xml脚本与我希望运行的Groovy脚本位于同一个git存储库中。检索套件创建者目标只是一个常春藤检索

<target name="retrieve-suite-creator" depends="clean, install-ivy">
    <ivy:retrieve conf="suite-creator" type="jar" pattern="${build.dir}/[artifact].[ext]" log="${ivy.resolve.log}" settingsRef="${ivy.build.settings}"/>
</target>

用我的常春藤。xml(与groovy脚本在同一个repo中):

<ivy-module version="1.0">
    <info organisation="myorg" module="MyAutomation" status="integration" branch="${ivy.branch}"/> 
    <configurations>
        <conf name="suite-creator" description="Configuration for Suite Creator"/>
    </configurations>
    <dependencies> 
        <dependency org="myorg" name="SuiteCreator" branch="mybranch" rev="1.16.1" conf="suite-creator->suite-creator" changing="true"/>
    </dependencies>
</ivy-module>

我必须将suite creator常春藤配置添加到SuiteCreator模块的常春藤中。xml(在单独的SuiteCreator Git repo中)。我无法使用现有的jar配置,因为它还下载了我不需要的所有可传递依赖项。

<ivy-module version="1.0">
    <info organisation="myorg" module="SuiteCreator" status="integration" branch="${ivy.branch}"/>
    <configurations>
        <!-- Build configurations -->
        <conf name="build" description="Classes used in jar compilation"/>
        <conf name="jar" description="Distribution jar"/>
        <conf name="suite-creator" description="Just the myorg-suitecreator.jar"/>
    </configurations>

    <publications>
        <artifact name="myorg-suitecreator" type="jar" ext="jar" conf="jar,suite-creator"/>
    </publications>

    <dependencies>
    ...
    </dependencies>
</ivy-module>
 类似资料:
  • 我正在使用pom常春藤任务来生成一个Pom文件,以便发布到伪像。除了一个问题之外,这非常有效。由于命名空间与我们的 Ivy 配置一起使用,因此 pom 文件中的依赖项不是原始的 maven 组 Id/工件 Id,而是命名空间派生的名称。这会导致使用此 pom 的 maven 项目在解析依赖项时失败。 例如: 在 ivy.xml 文件中,我们将具有如下依赖项: ivysettings.xml中有以下

  • 问题内容: 是否可以让您的用户下载其他名称的文件? 例如,有一个名为“ 4324ffsd34.jpg”的文件。我希望人们通过download.php以不同的名称(例如“ filetodownload.jpg”)下载它,而不重命名原始文件。 问题答案: 当然,请使用Content-disposition 标头 如果您希望提供默认文件名,而不是自动下载,那么这似乎可行。

  • 我用gradle下载常春藤罐子,gradle脚本如下: } } 我的常春藤配置是这样的: 常春藤上的罐子名称是: http://my.company/his-libs/org.slf4j/slf4j-api/1.6.4/slf4j-api-1.6.4.jar 但是当我使用gradle下载它们时,jar的名称是: D:\Users\myname。gradle\caches\artifacts-23\

  • 有没有办法下载Gradle实现。aar文件的名称。例如,有一个在build.gradle文件中编写的实现,比如实现'com.squareup.picasso:2.5.2',是否可以在没有gradle的情况下按名称'com.squareup.picasso:2.5.2'下载。aar库文件。我正在寻找一种方法来下载任何类型的库在一个android项目的build.gradle文件中提到。

  • 考虑以下示例: GCC和Clang都未能在C 17标准下编译此代码(使用Werror),因为(根据我的理解)在C 17 ADL中,当显式模板参数

  • 问题内容: 假设我有一个包含模块的软件包: 并且这些模块需要引用彼此包含的功能。似乎我的模块遇到了问题,因为有一个同名的标准模块。 例如,在我的模块同时需要我和标准python 模块的情况下,我会遇到麻烦,因为解释器会在程序包内部查找并找到我的模块,然后再遇到标准模块。 有没有办法解决?这是不可以的情况,并且模块名称不能重复使用吗? 有关封装哲学的任何解决方案和意见在这里都将很有用。 问题答案: