Java 使用'+';是否签署gradle/maven依赖项声明?

Java 使用'+';是否签署gradle/maven依赖项声明?,java,maven,gradle,dependencies,Java,Maven,Gradle,Dependencies,目前我有大约100个项目(微服务)。 一项可能与他们中的一半有关的任务。 在反复浏览这些项目时,我发现其中一些项目在一年多前就更新了 问题是:依赖项版本解析。我们是这样宣布的 compile group: 'org.apache.xmlgraphics', name: 'batik-ext', version: "1.+" 因此,实际版本不是严格固定的,可以随着时间的推移而演变。 因此,我的一些项目面临着这样一种演变的坏API 我认为最好是冻结版本,并确保存储库中的源代码在任何时候都是可编译的

目前我有大约100个项目(微服务)。 一项可能与他们中的一半有关的任务。 在反复浏览这些项目时,我发现其中一些项目在一年多前就更新了

问题是:依赖项版本解析。我们是这样宣布的

compile group: 'org.apache.xmlgraphics', name: 'batik-ext', version: "1.+"
因此,实际版本不是严格固定的,可以随着时间的推移而演变。 因此,我的一些项目面临着这样一种演变的坏API


我认为最好是冻结版本,并确保存储库中的源代码在任何时候都是可编译的。

刚才我测试了这段代码会发生什么:

compile group: 'org.apache.xmlgraphics', name: 'batik-ext', version: "1.+"
它所做的是,当我们进行渐变构建/刷新依赖项时,我们得到的是1.xx的最新版本。因此,如果最新版本是1.12(2017年7月),并且您在1.2是最新版本时添加了jar作为项目的依赖项,那么如果您在build.gradle中提供上述groovy代码并构建应用程序,最新版本即1.12将被加载到您的.gradle文件夹中

因此,如果您需要冻结某个特定版本,请按以下方式提供:

compile group: 'org.apache.xmlgraphics', name: 'batik-ext', version: "1.2"
这样您的应用程序就不会中断

始终建议保持静态版本以按预期运行应用程序,因为随着时间的推移,jar中的类会发生一些变化,版本也会不断变化

我有使用这些罐子的经验:

编译组:“org.jboss.resteasy”,名称: “resteasy多部分提供程序”,版本:“3.0.19.Final” 编译组:“org.jboss.resteasy”,名称: “resteasy多部分提供程序”,版本:“3.0.10.Final”

两者都有InputPart接口,该接口具有

getBody(GenericType类型)

但是GenericType的包在3.0.10和3.0.19中有所不同。 这破坏了我的申请


因此,如果您需要应用程序,最好保持静态版本而不中断。

我总是说,固定版本无法使用,因为版本范围使您根据定义构建不可复制…1。您可以为依赖项(如
dependencies.gradle
)创建一个占位符,并将其放入
$rootDir/gradle
中,然后理想情况下应该使用静态版本,因为如果库的供应商更改了API,这些版本可能会破坏您的代码。2.我认为这个问题是基于观点的。请提出一个具体问题。