コマンドラインからMavenのプラグインでプロパティをオーバーライド

エリックイースターミューラー:

このMavenのコマンドが起動H2データベースの古いバージョン(1.3.162)は:

mvn -debug com.edugility:h2-maven-plugin:1.0:spawn

推奨されているように、ここで私が代わりに、より最近のH2のバージョンを使用することができますので、私は....コマンドラインでプラグインのプロパティをオーバーライドしようとしています:

mvn -debug -Dh2Version=1.4.200 com.edugility:h2-maven-plugin:1.0:spawn

古いH2のバージョンとこのh2Versionプロパティが定義されてgithubの上、ここでプラグインのポンポンインチ

ここでは詳細なMavenの出力の終わりです

 [DEBUG] Process arguments: [C:\java\jdk-9.0.4\bin\java, -cp, C:\Users\eoste\.m2\repository\com\h2database\h2\1.3.162\h2-1.3.162.jar, org.h2.tools.Server, -tcp, -tcpPassword, h2-maven-plugin, -tcpPort, 9092]
 [INFO] H2 server spawned at tcp://localhost:9092

だけでなく、古いバージョン1.3.162の打ち上げを行いますが、私は、コマンドライン上に置かれていることh2Versionプロパティのゼロ言及のどこにでもあります。

私は、コマンドラインの末尾に-Dh2Versionパラメータを動かしてみました。私はまた、これらの事のどれも働いていない....ので、多分h2Versionが、その後再評価になるだろうダウンロードを強制するために、地元のレポからプラグインを削除しようとしました。 このブログには、プラグイン内部の依存関係を埋め込む方法を示し、それはトンだが、より私の単純なコマンドラインの呼び出しよりも複雑。

何が私が間違っているのでしょうか?

3.6.2 Mavenの使用してWindows 10、javaの9、

davidxxx:

何が私が間違っているのでしょうか?

1)あなたがプラグインを使用したい場合にご用心/ライブラリは維持されません。ソースコードは、約8年から更新されませんでした。それは重要な問題であってもよいです。

2)Mavenのプラグインを使用する方法を知っているために、ポンポン宣言で見ていません。あなたには、いくつかの情報を見つけることができますが、モジョ実装/仕様でより多くの情報を見つけるでしょう。
しかし、実際にはありません、あなたもこのプラグインを使用する方法を理解することに依存しないでください。

3)実際にMavenプラグインはありのpom.xmlに直接、さらにはコマンドラインでの使用のためにそれらをエクスポートします。設定可能なプロパティをサポートしています。しかし、それは自動ではありません。しかし、どちらの場合も、それは、プラグイン開発者によって予見する必要があり、それは一般的に、プラグインやソースリポジトリのホームページに記載されています。

あなたはモジョの実装に行けばあなたのケースでは実際には、:AbstractH2Mojo、設定が設定されているかを見ることができます。
すべてのプロパティはモジョのコンストラクタでデフォルト値を持っています。

 protected AbstractH2Mojo() {
    super();
    final Service tcpService = new Service("tcp", Service.getDefaultPort("tcp"), false, false);
    this.setServices(Collections.singletonList(tcpService));
    this.setPort(Service.getDefaultPort("tcp"));
    this.setShutdownPassword("h2-maven-plugin");
    this.setJava(new File(new File(new File(System.getProperty("java.home")), "bin"), "java"));
 }

モジョ空のコンストラクタが最初に呼び出され、その後、すべてのセッターは、作成されたインスタンス上で呼び出されています。
それはあなたのような性質を提供することにより、実行時にそのクラスで定義されたこれらのプロパティをオーバーライドできることを意味します${artifactIdPrefixWithoutMavenPlugin}.field
Mavenプラグインがあるのでh2-maven-plugin参照するプレフィックスがありますh2

あなたはそれを実行した場合:

mvn -X com.edugility:h2-maven-plugin:1.0:spawn -Dh2.port=8084 -Dh2.useSSL=false

あなたは出力で見ることができます。

[デバッグ]の設定モジョ'com.edugility:H2-達人-プラグイン:1.0:スポーン'基本的なコンフィギュレータと- > 
[デバッグ](S)ポート= 8084 
[DEBUG](S)shutdownHost = localhostの
[DEBUG](S) shutdownPassword = H2-達人-プラグイン
[DEBUG](S)useSslオプション= FALSE 
[DEBUG] -エンドコンフィギュレーション- 
[デバッグ]プロセス引数:[/ USR / LIB / JVM / Javaの-8- OpenJDKの-AMD64 / JRE /ビン/ javaの、-cp、/home/david/.m2/repository/com/h2database/h2/1.3.162/h2-1.3.162.jar、org.h2.tools.Server、-tcp、-tcpPassword、H2- maven-pluginの、-tcpPort、8084]

それでも同じクラスで見れば使用H2 jarファイルについては、あなたはクラスパスからJARファイルを取得し、その部分が表示されます。

 public final File getH2() {
    final ProtectionDomain pd = Server.class.getProtectionDomain();
    assert pd != null;
    final CodeSource cs = pd.getCodeSource();
    assert cs != null;
    final URL location = cs.getLocation();
    assert location != null;
    try {
      return new File(location.toURI());
    } catch (final URISyntaxException wontHappen) {
      throw (InternalError)new InternalError().initCause(wontHappen);
    }
 }

あなたがのpom.xmlでのプラグインやプラグインの宣言からの実行時にプロパティがそれを達成するためにモジョに定義されていないので、コマンドラインから:それはあなたが使用さH2のJARを変更する方法がありませんことを意味します。

あなたはH2のバージョンを変更する場合は、あなたはプラグインによって埋め込まれたバージョンを変更する必要があります。スターターとして、あなたはあなたの条件に一致すると、そのプラグインでの作業は可能なものであるギャップのバージョンにもかかわらずかどうかを確認するためにポンポンで使用さh2の依存性を、プラグインのGITリポジトリをフォークに変更しようとすることができます。

:次のような、それは完全に設定可能にするためにモジョの新しいプロパティを追加することができることを注意

mvn ... -Dh2Version=1.4.200 

しかし、その場合には、あなたはそれを取得する必要があります。例えばM2の中央リポジトリから依存関係をダウンロードする要求を行うことにより、例えば。
そして、あなたはまた、H2のバージョンの唯一の有効な範囲が使用されていることを確認してください。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=9030&siteId=1