0

私はオープンソース プロジェクトを維持し、そのリリースをThe Central Repositoryに公開しています。を公​​開しましoshi-core-2.6た。そのリリースの私のバージョン管理は次のpom.xmlとおりです。

<groupId>com.github.dblock</groupId>
<artifactId>oshi-core</artifactId>
<version>2.6</version>

日付/時刻関数のため、私のコードには Java 8 が必要です。ユーザーの要求をサポートするために、このリリースの直前に、threeten バックポートを使用して Java 7 互換バージョンをリリースしましたpom.xml

<groupId>com.github.dblock</groupId>
<artifactId>oshi-core</artifactId>
<version>2.6-m-java7</version>

How Version Numbers Work in Mavenは、「修飾子を持つすべてのバージョンは、修飾子のない同じバージョン (リリース バージョン) よりも古い」と述べています。別の StackOverflow の質問、maven はバージョン番号をどのように並べ替えますか? には、ga/final (空の文字列) リリースよりも「早く」ソートされるはずのいくつかのよく知られた修飾子 (アルファ、ベータ、マイルストーン、rc、およびスナップショット) をリストするComparableVersionクラスを引用した回答があります。

以前のバージョンでカスタム修飾子を使用してい-m-たので、Java7 バージョンでマイルストーン修飾子 ( ) を使用して、2.6 よりも「前の」リリースであることを Maven に示すようにしました。ただし、中央リポジトリを検索する-m-と、バージョンが「最新バージョン」であることが示されます。

私が持っている質問:

  • 中央リポジトリの並べ替えが、上記でリンクした文書化された並べ替えと一致しないのはなぜですか?
    • Maven のソートの以前のバージョン (3.2 より前) を使用していますか? もしそうなら、どのような一貫した「最新バージョン」のソートを期待できますか?
    • アーティファクト名のハイフンは何か影響がありますか?
  • 同じバージョン番号を 2 つの形式でリリースする方法として、私が (明らかに下手に) 選択した方法よりも良い方法はありますか?
4

1 に答える 1

3

これは分類器の仕事であり、そのような奇妙なバージョンの仕事ではありません。

  • 2.6 と分類子: JDK 8 の場合は「jdk8」
  • 2.6 分類子: "jdk7" など

さらに、Oracle の参照ドキュメントは Maven 2 では有効でしたが、Maven 3 では有効ではありませんでした。

それとは別に、 semver に基づいて、このような競合しない変更のメジャー バージョンを増やすことをお勧めします

さらに、アルファなどで ComparableVersion を参照しています。これは、Maven が内部でバージョンを処理する方法です。これは、そのクラスの単体テストを見ることができます。

ただし、ちょっとしたコマンド ライン ツールを使用して Maven の動作を確認できます。

java -jar apache-maven-3.3.9\lib\maven-artifact-3.3.9.jar 1.0.0 2.0.0
Display parameters as parsed by Maven (in canonical form) and comparison result:
1. 1.0.0 == 1
   1.0.0 < 2.0.0
2. 2.0.0 == 2

これを使用すると、Maven 3+2.6-m-java7がより大きなものとして処理することがわかります2.6

java -jar apache-maven-3.3.9\lib\maven-artifact-3.3.9.jar 2.6-m-java7 2.6
Display parameters as parsed by Maven (in canonical form) and comparison result:
1. 2.6-m-java7 == 2.6-m-java-7
   2.6-m-java7 > 2.6
2. 2.6 == 2.6

これが、セントラルもそれをより大きなものとして扱う理由です。

したがって、rcまたはのようなものを使用alphaすると、結果が表示されます。

java -jar apache-maven-3.3.9\lib\maven-artifact-3.3.9.jar 2.6-alpha 2.6
Display parameters as parsed by Maven (in canonical form) and comparison result:
1. 2.6-alpha == 2.6-alpha
   2.6-alpha < 2.6
2. 2.6 == 2.6

java -jar apache-maven-3.3.9\lib\maven-artifact-3.3.9.jar 2.6-rc1 2.6
Display parameters as parsed by Maven (in canonical form) and comparison result:
1. 2.6-rc1 == 2.6-rc-1
   2.6-rc1 < 2.6
2. 2.6 == 2.6

(上記の CLI ツールは、Maven 3.2.5 以降で使用できます)。

最善の解決策は、通常のアーティファクトを生成するモジュールを用意することです。JDK 7 の構成を含む補足モジュールを作成すると、「3 つのバックポート」を使用して他のアーティファクトを作成できます。これらのアーティファクトには、そのような目的のための分類子が必要です。

于 2016-06-17T07:22:19.503 に答える