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