Gradle:使第三方jar可用于本地gradle存储库

时间:2010-04-03 21:59:34

标签: maven-2 jar repository install gradle

目前,我正在测试Gradle作为Maven的替代品。在我的项目中,有一些第三方罐子,在任何(Maven)存储库中都不可用。我现在的问题是,如何管理它以将这些jar安装到我的本地.gradle存储库中。 (如果可能,我不想使用本地Maven存储库,因为Gradle应该独立运行。)目前,由于缺少jar,我得到了很多例外。在Maven中,运行install命令非常简单。但是,我在Google上搜索类似于Maven安装命令的内容并不成功。有人有想法吗?

6 个答案:

答案 0 :(得分:38)

您可以将文件系统JAR依赖项包括在内:

dependencies {
    runtime files('libs/a.jar', 'libs/b.jar')
    runtime fileTree(dir: 'libs', include: '*.jar')
}

你可以改变compile / testCompile / etc的运行时间。

答案 1 :(得分:10)

Adam Murdoch在http://gradle.1045684.n5.nabble.com/Gradle-Make-a-3rd-party-jar-available-to-local-gradle-repository-td1431953.html

的邮件列表上给出了更全面的答案

截至2010年4月,没有简单的方法可以将新的jar文件添加到〜/ .gradle存储库中。目前正在研究这是否已经改变。

截至2014年10月,情况仍然如此 - 因为gradle会对你的jar文件进行md5校验和,你不能简单地将它下载并放入.gradle / caches下的目录中,gradle不会,据我所知,任何可以让你获取本地文件并将该文件推送到缓存的任务。

答案 2 :(得分:8)

在Adam Murdoch帖子中使用选项(1)(上面已经链接:http://gradle.1045684.n5.nabble.com/Gradle-Make-a-3rd-party-jar-available-to-local-gradle-repository-td1431953.html)和gradle-1.3,它的效果很好!

这是他的评论:

  
      
  1. 将jar复制到本地目录并使用flatDir()存储库在那里使用它们。例如,您可以将它们复制到   $ projectDir / lib并在你的构建文件中执行:
  2.         

    知识库{        flatDir(dirs:'lib')}

         

    lib目录中的文件必须遵循命名方案:   name-version-classifier.extension,其中包含版本和分类器   可选的。所以,例如你可以称它们为groovy-1.7.0.jar甚至   groovy.jar

         

    然后,您只需将依赖项声明为正常:

         

    依赖{       编译'groovy:groovy:1.7.0'}

         

    有一个更详细的flatDir()存储库:   http://gradle.org/0.9-preview-1/docs/userguide/dependency_management.html#sec:flat_dir_resolver

         
        
    1. 与上述类似,但使用常春藤解析器而不是flatDir()。这几乎与上面相同,但允许一个   就命名和位置而言,还有更多选择。
    2.         

      有一些细节:   http://gradle.org/0.9-preview-1/docs/userguide/dependency_management.html#sub:more_about_ivy_resolvers

           
          
      1. 不要为声明依赖项而烦恼。只需将jar复制到某个地方的本地目录并添加文件依赖项。例如,   如果罐子在$ projectDir / lib:
      2.         

        依赖{        编译fileTree('lib')//这包括编译类路径中'lib'下的所有文件}

             

        更多详情:   http://gradle.org/0.9-preview-1/docs/userguide/dependency_management.html#N12EAD

             
            
        1. 使用maven install将依赖项安装到本地maven缓存中,并使用maven缓存作为存储库:
        2.         

          知识库{        mavenRepo(urls:new File(System.properties ['user.home'],'。m2 / repository')。toURI()。toURL())}

答案 3 :(得分:3)

也许我在阅读你的问题时遗漏了一些东西,假设你的gradle repo是flatDir类型,你应该能够以myjar-1.0.jar的形式复制那里的文件,并将它们解析为myjar of version 1.0。

不确定为什么Gradle需要运行maven才能访问本地maven存储库。您可以只定义maven repos,它应该解决依赖关系。如果需要,您可以使用gradle upload推送罐子本地或远程maven repos。在这种情况下,它将执行maven。

答案 4 :(得分:3)

简而言之:部署到存储库管理器。它可以在公司局域网上本地。

对这类问题的一种完全不同的思考方式,特别是如果它经常发生,就是使用存储库管理器。有一些很棒的开源选项,如Artifactory,Nexus或Archiva。

让我们假设你有一个来自某些可疑来源的jar文件需要包含在你的构建中,直到你有机会重构它。存储库管理器允许您将文件上载到您自己的存储库,因为为了这个例子,dubious-origin-UNKNOWN.jar

然后你的build.gradle看起来像这样:

repositories {
    mavenRepo urls: "http://your.own.repository/url";
}

dependencies {
    compile "dubious:origin:UNKNOWN";
}

使用存储库管理器还有很多其他优点,例如缓存远程工件,从scm中删除工件,登台版本,更细粒度的用户权限等等。

另一方面,您将添加一个服务器,该服务器带有一些维护开销,以保持您的构建运行。

我想,如果您的项目的大小,则取决于。

答案 5 :(得分:1)

我认为这样的事情应该有效:

dependencies {
  files('yourfile.jar')
}

它对你有用吗?