验证maven-jar-plugin中的manifest.mainClass

时间:2016-04-07 14:03:56

标签: java maven build-automation maven-jar-plugin

有没有办法验证(甚至使用其他插件)mainClassmaven-jar-plugin指定的有效类,更好的是它有public static void main(String[] argv)方法?< / p>

通常在重构之后,这是错过的一件事,我想避免这种情况并在verify生命周期阶段进行检查。

1 个答案:

答案 0 :(得分:1)

您可以使用exec-maven-plugin及其exec目标执行以下命令:

java -jar target\project.jar

根据清单文件确实执行它(因此执行配置的main方法)或失败。

您可以在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属性以避免硬编码的工件名称和路径,建议使用)
  • 作为建议,还要将此主要方法应该预见的另一个参数作为健全性检查传递给执行,即执行 dry-run 之类的操作(只需将信息打印到控制台或只是立即返回)
  • 如果清单的信息正确,执行将成功运行,否则失败(以及您的构建)。

只需将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)