簡體   English   中英

在 maven-jar-plugin 中驗證 manifest.mainClass

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM