[英]Validate manifest.mainClass in maven-jar-plugin
有沒有辦法驗證(甚至使用另一個插件)為maven-jar-plugin
指定的mainClass
是一個有效的類,甚至更好的是它有一個public static void main(String[] argv)
方法?
通常在重構之后,這是被遺漏的一件事,我想避免這種情況並在verify
生命周期階段進行檢查。
您可以使用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
在最終的artifact上執行上面的java
命令(注意maven屬性的使用,避免硬編碼的artifact名稱和路徑,推薦) 簡單地將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 類中找不到 Main 方法,請將 main 方法定義為:
public static void main(String[] args)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.