到目前為之,還沒有執行HelloWorld的專案,不要忘了HelloWorld類可是有一個main方法的。使用mvn clean install命令預設生成的jar 包是不能直接執行的。因為帶有main方法的類資訊不會新增到manifest中(開啟jar檔案中的META-INFO/MANIFEST.MF檔案,將無法看到Main-Class一行)。為了生成可以執行的jar檔案,需要藉助maven-shade-plugin,配置該外掛如下:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>1.2.1</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <mainClass>HelloWorld</mainClass> </transformer> </transformers> </configuration> </execution> </executions> </plugin> </plugins> </build>
plugin元素在POM中的相對位置在<project><build><plugins>下面。我們配置了mainClass為:HelloWorld,專案打包時會將該資訊放到MANIFEST中。現在執行mvn clean install,待構建完成後開啟target/目錄,可以看到hellow-world-1.0-SNAPSHOT.jar,這個jar檔案帶有Main-Class資訊的可執行jar,開啟hellow-world-1.0-SNAPSHOT.jar的META-INFO/MANIFEST.MF,可以看到它包含這一行資訊:
Main-Class: HelloWorld
現在在專案根目錄中執行該jar檔案:
java -jar hello-world-1.0-SNAPSHOT.jar
輸出:
Hello World!!