Java 无版本渐变依赖项

Java 无版本渐变依赖项,java,gradle,dependencies,dependency-management,ivy,Java,Gradle,Dependencies,Dependency Management,Ivy,当我这么做的时候 dependencies { file('libs/something.jar') } 我的发行版中有something.jar。 但是,当我想将依赖关系推送到远程存储库(ivy或maven)并想从那里使用它时,gradle总是向jar添加一个版本后缀 dependencies { compile group: 'org.company', name: 'something', version: '1.0' } 结果是something-1.0.jar 甚至

当我这么做的时候

dependencies {
    file('libs/something.jar')
}
我的发行版中有
something.jar
。 但是,当我想将依赖关系推送到远程存储库(ivy或maven)并想从那里使用它时,gradle总是向jar添加一个版本后缀

dependencies {
    compile group: 'org.company', name: 'something', version: '1.0'
}
结果是
something-1.0.jar

甚至这个

dependencies {
    compile group: 'org.company', name: 'something'
}
结果是
something-.jar
(注意破折号)

我能否以某种方式防止存储库依赖项具有版本


(我的动机是jar是第三方jar,我不想在git repo中使用它,但我也不想更改它的名称。)

正如您所说,您可以在存储库中为工件提供一个版本。您只是不希望在应用程序的jar中有一个版本。你可以

configurations {
    something { transitive = false }
}
dependencies {
    something 'org.company:something:1.0'
    something 'org.company:something-else:1.0'
    compile files(tasks['dummyTask'])
    compile 'org.foo:some-normal-dep:1.1'
}
task copySomething(type:Copy) {
    from configurations.something
    into "$buildDir/something"
    rename '(.+)-.+?\\.jar', '$1.jar'
}
task dummyTask {
    dependsOn copySomething
    inputs.dir "$buildDir/something"
    outputs.files fileTree("$buildDir/something")
}

这方面的主要促成因素是可以接受
任务

,这是存储库的一个非常基本的概念,即工件(jar)由GAV(组/工件/版本)唯一标识。想象一下,jar的错误修复程序发布了。。。我们如何区分旧罐子和新罐子?(剧透警报:这是一个版本号!)@lance java这是一个第三方企业级库。我可以自己在存储库中对库进行版本控制,只是在从存储库解析后,我不希望在文件名(和类路径)中包含版本号。好的,我将添加一个答案,然后这几乎就是它,文件会被复制和重命名,但出于某种原因,复制任务输出目录现在被视为一个依赖项。ListJars输出“something”而不是“something.jar”。更新为使用
Project.copy(…)
和自定义任务输入/输出这似乎适用于硬编码的something.jar文件。如果
configurations.something
包含多个文件,我想执行类似
rename'-1.0',''
?我想我可以做一些类似于
outputs.files configurations.something.getFiles()(和rename)
,但是configurations.something.getFiles当时似乎是空的。如果有多个文件要重命名,你可以在
rename
中使用带有捕获组的正则表达式,例如:
rename'(.+)-.+?\.jar',“$1.jar”
是,但是有问题的部分是这个
outputs.file“$buildDir/something/something.jar”