2013-06-18 28 views
2

我很难弄清楚如何解决Artifactory中的远程工件从Gradle构建中的依赖关系。Gradle Artifactory依赖关系:SNAPSHOT模式问题

这件神器,请访问:

http://192.168.2.130:8081/artifactory/simple/libs-snapshot-local/com/company/test/1.0-SNAPSHOT/TestArtifact-1.0-20130607.104006-2.apklib 

我的build.gradle是:

buildscript { 
    repositories { 
     maven { 
      url "http://192.168.2.130:8081/artifactory/gradle" 

      credentials { 
       username = "$artifactory_user" 
       password = "$artifactory_password" 
      } 
     } 

     dependencies { 
      classpath 'com.android.tools.build:gradle:0.4.2' 
      classpath(group: 'org.jfrog.buildinfo', name: 'build-info-extractor-gradle', version: '2.0.12', changing: true) 
     } 
    } 
} 

allprojects { 
    apply plugin: 'idea' 
    apply plugin: 'android' 
    apply plugin: 'artifactory' 
} 

repositories { 
    maven { 

     url "http://192.168.2.130:8081/artifactory" 

     credentials { 
      username = "$artifactory_user" 
      password = "$artifactory_password" 
     } 
    } 
} 

artifactory { 
    contextUrl = 'http://192.168.2.130:8081/artifactory/simple' 

    resolve { 
     repository { 
      repoKey = 'libs-snapshot' 
      maven = true 
     } 
    } 
} 

在Artifactory的,仓库libs-snapshot使用maven独特的快照行为,并结合maven-2-default布局,具有以下配置:

工件路径模式:[orgPath]/[module]/[baseRev](-[folderItegRev])/[module]-[baseRev](-[fileItegRev])(-[classifier]).[ext]

文件夹整合修订的RegExp:SNAPSHOT

文件集成修订的RegExp:SNAPSHOT|(?:(?:[0-9]{8}.[0-9]{6})-(?:[0-9]+))

所以从我的理解摇篮应通过查看解决的依赖:

http://192.168.2.130:8081/artifactory/simple/libs-snapshot/com/company/test/TestArtifact/1.0-SNAPSHOT/TestArtifact-1.0-xxxxxxxx.xxxxxx-x.apklib 

,但它实际上是在看:

http://192.168.2.130:8081/artifactory/com/company/test/TestArtifact/1.0/TestArtifact-1.0.apklib 

所以显然它不能解决依赖。我还试图用通过Artifactory的产生gradle这个编译行,但它没有这样做的伎俩之一:

compile(group: 'com.company.test', name: 'TestArtifact', version: '1.0-20130607.104006-2', ext: 'apklib') 

虽然我花了一些时间阅读文章和摇篮/ Artifactory的文档,我更糊涂了,现在我刚刚开始...所以,我有几个问题:

1)Gradle似乎没有使用artifactory {}部分。实际上,它只使用我在存储库{}部分中声明的url。但是,当我删除存储库部分时,它只会在本地查找依赖关系。这是为什么?声明Artifactory存储库的正确方法是什么?

2)请问Gradle是否知道底层的libs-snapshot布局?如果没有,Artifactory插件是否提供了一种自定义工件搜索模式的方法(直接Maven,而不是常春藤)?因为我只使用Artifactory的免费版本,因此我将无法编辑存储库布局。

3)为什么Artifactory会生成一个Gradle编译行,它似乎不匹配工件容器存储库使用的布局?

在此先感谢!

+0

我遇到同样的问题。你能弄清楚这一点吗? – amadib

回答

3

这是一个温和的回答我知道,但我们使用gradle这个在Artifactory的解决文物和所有我们指定如下:

repositories { 
    mavenLocal() 
    maven { 
     url "http://repo1:8081/artifactory/repo" 
    } 
} 

这是一个非常根本不同的配置结构,考虑到它具有基本相同的详细信息。可能值得一试。

+0

所以你只是不使用artifactory插件和artifactory节{}? – user1860579

+0

我在我们的gradle文件的任何地方都找不到任何提及。甚至grep可以找到的'artifactory'的唯一实例是在url中。正如我所说,我对解释没有深入的回答,但我可以说我们的东西正在发挥作用。显然有很多变数,但我甚至都没有意识到有一个artifactory插件! –

+0

我应该补充一点,我们使用的是付费Artifactory,并且发布工程团队为我们设置了它。他们很可能做了一些配置,以便为我们简单地工作。 –

2

你有一些混乱与Artifactory的URL声明:)

首先,当您使用Artifactory的插件,你可以跳过repositories{}声明(你已经在artifactory{}块声明它) 该块中的contextUrl应该指向Artifactory根,在你的情况下http://192.168.2.130:8081/artifactory(没有simple)。 这在Artifactory documentation中有很好的记录。

如果你喜欢使用repositories{}声明,您必须声明一个真正的仓库在那里,没有根,你的情况http://192.168.2.130:8081/artifactory/libs-snapshot 这在Gralde documentation有据可查。

我强烈建议你使用Artifactory插件方法。使用DSL可让您更轻松地进行配置和更强大的集成。

+0

这是我第一次尝试。但是,当删除存储库声明并仅使用artifactory {}声明时,似乎Gradle只尝试在本地解决依赖关系。事实上,当我使用--debug选项运行它时,它甚至没有提到我给出的contextUrl。也许这是我的Gradle配置的问题... – user1860579

+0

有没有人有任何进一步的这一个?我遇到了同样的问题。 – IanWatson

+0

你遇到什么问题?你使用Artifactory插件吗? – JBaruch