【问题标题】:Versionless gradle dependencies无版本的 gradle 依赖
【发布时间】:2018-06-02 00:08:54
【问题描述】:

当我这样做时

dependencies {
    file('libs/something.jar')
}

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

dependencies {
    compile group: 'org.company', name: 'something', version: '1.0'
}

结果为@​​987654324@。

这个

dependencies {
    compile group: 'org.company', name: 'something'
}

结果为@​​987654326@(注意破折号)。

我能否以某种方式阻止存储库依赖项拥有版本?

(我的动机是 jar 是 3rd 方 jar,我不想将它放在 git repo 中,但我也不希望它的名称改变。)

【问题讨论】:

  • 这是一个非常基本的存储库概念,即工件(jar)可以由 GAV(组/工件/版本)唯一标识。想象一下,jar 的错误修复已发布……我们如何区分旧 jar 和新 jar? (剧透警告:这是一个版本号!)
  • @lance-java 第三方企业级库。我可以自行对存储库中的库进行版本控制,我只是不想在从存储库中解析文件名(和类路径)中的版本号。
  • 好的,那我再补充一个答案

标签: java gradle dependencies dependency-management ivy


【解决方案1】:

正如您所说,您可以在存储库中为工件提供一个版本。您只是不希望应用程序的 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")
}

主要促成因素是Project.files(...) 可以接受Task

【讨论】:

  • 差不多了,文件被复制并重命名,但是由于某种原因,复制任务输出目录现在被视为依赖项。 ListJars 输出“something”而不是“something.jar”。
  • 更新为使用 Project.copy(...) 和自定义任务输入/输出
  • 这似乎适用于硬编码的 something.jar 文件。如果configurations.something 包含多个文件并且我想做rename '-1.0', '' 之类的事情怎么办?我以为我可以做类似outputs.files configurations.something.getFiles() (and rename) 的事情,但当时的configurations.something.getFiles 似乎是空的。
  • 如果有多个文件要重命名,您可以在rename 中使用带有捕获组的正则表达式,例如:rename '(.+)-.+?\.jar', '$1.jar'
  • 是的,但有问题的部分是这个outputs.file "$buildDir/something/something.jar"
猜你喜欢
  • 2017-08-21
  • 1970-01-01
  • 2023-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-26
  • 1970-01-01
相关资源
最近更新 更多