Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Gradle中将web托管的.jar文件作为依赖项处理?_Gradle_Dependency Management - Fatal编程技术网

如何在Gradle中将web托管的.jar文件作为依赖项处理?

如何在Gradle中将web托管的.jar文件作为依赖项处理?,gradle,dependency-management,Gradle,Dependency Management,我对JVM世界相当陌生,我发现Maven和Gradle是处理构建和依赖关系的非常出色的工具 我需要在我的解决方案中合并两个jar文件。它们不托管在任何Maven存储库中。我必须使用libs文件夹并在开发人员之间或在repo中共享文件吗 jar文件不是由我控制的,我不想在Maven Central或类似的平台上安装一些东西。我相信jar文件的url是非常持久的。第一个解决方案 不要离开格拉德尔。相反,请尝试使用文件集合。它应该有用!但对我来说不是,这是第二个解决方案 dependencies {

我对JVM世界相当陌生,我发现Maven和Gradle是处理构建和依赖关系的非常出色的工具

我需要在我的解决方案中合并两个jar文件。它们不托管在任何Maven存储库中。我必须使用libs文件夹并在开发人员之间或在repo中共享文件吗


jar文件不是由我控制的,我不想在Maven Central或类似的平台上安装一些东西。我相信jar文件的url是非常持久的。

第一个解决方案
不要离开格拉德尔。相反,请尝试使用文件集合。它应该有用!但对我来说不是,这是第二个解决方案

 dependencies {
        def webHostedJarFiles = ["http://url.to.jar", "http://url.to.second.jar"]
                .collect{fileName->new File(fileName)}

        compile([
                files{webHostedJarFiles}, 
                'commons-validator:commons-validator:1.4.1'
                 /* and all the other Maven dependencies...*/])
    }
将URL直接放在files方法中会导致无法将URL“”转换为文件异常

由于某种原因,这对我不起作用。这些依赖项被下载并显示在IntelliJ的gradle插件中,但在编译comilpiler时,似乎无法找到依赖项

第二种解决方案
不要离开格拉德尔。而是将文件下载到libs文件夹中

复制任务:

task downloadJarsToLibs(){
    def f = new File('libs/myFile.jar')
    if (!f.exists()) {
        new URL('http://path.to/myFile.jar').withInputStream{ i -> f.withOutputStream{ it << i }}
    }    
}
第三种解决方案(Cortesey of@RaGe)
示例文件:


build.gradle:

repositories {
    ivy {
        url 'http://example.com/'
        layout 'pattern', {
            artifact '/uda/[organisation]/7.2/[module]/[revision].[ext]'
        }
    }
    mavenCentral()
}

dependencies {
    compile 'virtuoso:rdfproviders/jena210:virt_jena2:jar', 'virtuoso:jdbc:virtjdbc4:jar'

}

不幸的是,这似乎不适用于我的设置,但Gradle很高兴,在需要时下载文件(因为它们是缓存的)

另一种方法是假装在线jar文件是一个自定义布局的常春藤存储库。这样做的好处是,您可以使用gradle的缓存功能,这样就不必为每个构建下载依赖项。看,我试了一下,但我没能让它工作。你能举个例子吗?@RaGe:把文件放下来似乎很有效。但是它不能编译,intelliJ也不能识别aritifacts,就像我上面的第一个解决方案一样。您的模块名中有一个
/
?我不知道这是否是问题所在,但我觉得可能是。
repositories {
    ivy {
        url 'http://example.com/'
        layout 'pattern', {
            artifact '/uda/[organisation]/7.2/[module]/[revision].[ext]'
        }
    }
    mavenCentral()
}

dependencies {
    compile 'virtuoso:rdfproviders/jena210:virt_jena2:jar', 'virtuoso:jdbc:virtjdbc4:jar'

}