1

mainClass指定されたmaven-jar-pluginが有効なクラスであることを (別のプラグインを使用しても) 検証する方法はありpublic static void main(String[] argv)ますか?

verifyこれはリファクタリング後に見落とされることがよくあることであり、これを避けてライフサイクルの段階で確認したいと考えています。

4

1 に答える 1

1

exec-maven-pluginとその目標を使用してexec、次のコマンドを実行できます。

java -jar target\project.jar

マニフェストファイルに従って実際に実行するか(したがって、構成されたメインメソッドを実行する)、または失敗します。

verifyしたがって、次の (サンプル) 構成をフェーズに追加できます。

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>2.6</version>
            <configuration>
                <archive>
                    <manifest>
                        <mainClass>com.sample.Main</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>1.4.0</version>
            <executions>
                <execution>
                    <id>check-main</id>
                    <phase>verify</phase>
                    <goals>
                        <goal>exec</goal>
                    </goals>
                    <configuration>
                        <executable>java</executable>
                        <arguments>
                            <argument>-jar</argument>
                            <argument>${project.build.directory}/${project.build.finalName}.jar</argument>
                            <argument>sanityCheck</argument>
                        </arguments>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

上記のスニペットでは、次のようになります。

  • maven-jar-pluginマニフェストでメイン クラスを構成するための の構成 (com.sample.Mainこの場合のサンプル)
  • exec-maven-plugin最終アーティファクトで上記のコマンドを実行するように構成しjavaます (ハードコーディングされたアーティファクト名とパスを避けるために、Maven プロパティの使用に注意してください)。
  • 提案として、メインメソッドがサニティチェックとして予測する必要がある追加の引数もこの実行に渡します。つまり、ドライランのように実行します(コンソールに情報を出力するか、すぐに戻るだけです)
  • マニフェストの情報が正しい場合、実行は正常に実行されます。それ以外の場合 (およびビルド) は失敗します。

mainメソッドの名前を単純に に変更main2すると、ビルドが中断され、次のメッセージが表示されます。

[INFO] --- maven-jar-plugin:2.6:jar (default-jar) @ simple ---   
[INFO] Building jar: C:\Development\workspace-mars\simple\target\simple-0.0.1-SNAPSHOT.jar   
[INFO]   
[INFO] --- exec-maven-plugin:1.4.0:exec (check-main) @ simple ---   
Error: Main method not found in class com.sample.Main, please define the main method as:   
   public static void main(String[] args)   
[INFO] ------------------------------------------------------------------------  
[INFO] BUILD FAILURE   
[INFO] ------------------------------------------------------------------------   

上記のメッセージは、あなたが探していたものとほぼ同じであることに注意してください。

エラー: クラス com.sample.Main にメイン メソッドが見つかりません。メイン メソッドを次のように定義してください:
public static void main(String[] args)

于 2016-04-07T14:19:44.523 に答える