我正在使用QR-Bill 庫 v2.5.3。作為其依賴項之一,它使用范圍指定 PDFBox [2.0.0,3.0):
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>[2.0.0,3.0)</version>
<scope>runtime</scope>
</dependency>
對于 Gradle 專案,依賴項決議為pdfbox-2.0.24. 對于 Maven 專案,它決議為pdfbox-3.0.0-RC1.
Maven 和 Gradle 真的以不同的方式對待版本范圍嗎?庫的正確范圍是多少,以便 Gradle 和 Maven 都使用最新的 2.x 版本的 PDFBox 但不使用 3.x 版本(因為它不兼容)?
更多除錯細節:
Maven專案
https://github.com/manuelbl/SwissQRBill/tree/master/examples/maven_example
% mvn dependency:tree
[INFO] net.codecrete.qrbill:maven-example:jar:1.0-SNAPSHOT
[INFO] \- net.codecrete.qrbill:qrbill-generator:jar:2.5.3:compile
[INFO] - io.nayuki:qrcodegen:jar:1.7.0:runtime (version selected from constraint [1.6.0,2.0))
[INFO] \- org.apache.pdfbox:pdfbox:jar:3.0.0-RC1:runtime (version selected from constraint [2.0.0,3.0))
[INFO] - org.apache.pdfbox:fontbox:jar:3.0.0-RC1:runtime
[INFO] \- commons-logging:commons-logging:jar:1.2:runtime
搖籃專案
https://github.com/manuelbl/SwissQRBill/tree/master/examples/gradle_example
% gradle dependencies --configuration runtimeClasspath
runtimeClasspath - Runtime classpath of source set 'main'.
\--- net.codecrete.qrbill:qrbill-generator:2.5.3 -> 2.5.3
--- io.nayuki:qrcodegen:[1.6.0,2.0) -> 1.7.0
\--- org.apache.pdfbox:pdfbox:[2.0.0,3.0) -> 2.0.24
--- org.apache.pdfbox:fontbox:2.0.24
| \--- commons-logging:commons-logging:1.2
\--- commons-logging:commons-logging:1.2
uj5u.com熱心網友回復:
Maven 的排序實作狀態比 alpha、beta 和 RC 版本要少于實際版本。這就是您看到這種行為發生的原因。
因此,實際上 pdfbox-3.0.0-RC1 < pdfbox-3.0。
為了完全排除 3.0,您需要排除第一個預發布。您可以通過一些方法實作:
[2.0.,3-alpha)
[2.0.0,3.0.0-alpha2)
或者另一個選項 - 這并不理想 - 是將范圍的上限指定為 2.x 版本的最新版本:
[2.0.0,2.0.24]
最后一個選項遠不是很好,因為如果 Apache 發布名為 2.0.25 的 2.x 修訂版,Maven 將不會包含它。
uj5u.com熱心網友回復:
根據 Diego M. 的回答,這里有一些附加資訊:
版本要求[2.0,3.0)似乎沒有任何意義:
- 典型的意圖是將其限制為所有 2.* 版本。但是,Maven 還包括所有 3.0 預發布版本。我無法想象這會有用的情況。
- Maven 和 Gradle 對它的解釋不同。因此,無論何時使用這兩種工具,它都不適合,尤其是在發布到 Maven Central 時。
限制為 2.* 版本的更好版本要求是:[2.0,2.999999].
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/364545.html
上一篇:缺少從Weka依賴項的匯入
