詳解Maven打包和執行
將專案進行編譯、測試之後,接下來就是打包(package),我們的pom.xml中沒有指定打包型別,那麼使用預設打包型別jar,簡單的執行命令mvn clean package
進行打包
從輸出內容可以看出,Maven在打包之前進行了編譯、測試等操作。
jar任務負責打包,實際上就是jar外掛的jar目標將專案主程式碼打包成一個名為hello-world-1.0-SNAPSHOT.jar的檔案。該檔案也位於target/輸出目錄中
它是根據artifact-version.jar規則進行命名的。
至此,我們得到了專案的輸出,如果有需要的話,就可以複製這個jar檔案到其他專案的Classpath中,從而使用HelloWorld類。
但是,如何讓其他的Maven專案直接飲用這個jar呢,還需要一個安裝步驟:mvn clean install
在打包之後,又執行了install。從輸出中可以看到該任務將專案輸出的jar安裝到了Maven本地倉庫中,可以開啟相應的資料夾看到HelloWorld專案的pom和jar。
現在我們已經介紹了Maven最主要的命令:mvn clean compile、mvn clean test、mvn clean package、mvn clean install。
執行test之前是會先執行compile的,執行package之前是會先執行test的,類似的install之前會先執行package,可以在任何一個Maven專案中執行這些命令。
預設打包生成的jar是不能夠直接執行的,因為帶有main方法的類資訊不會新增到manifest中(開啟jar檔案中的META-INF/MANIFEST.MF檔案,將無法看到Main-Class一行)
為了生成可執行的jar檔案,需要藉助maven-shade-plugin
<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>com.juvenxu.mvnbook.helloworld.HelloWorld</mainClass> </transformer> </transformers> </configuration> </execution> </executions> </plugin>
這裡配置了mainClass為com.juvenxu.mvnbook.helloworld.HelloWorld,專案打包時會將該資訊放到MANIFEST中,再次執行mvn clean install,構建完之後開啟target/目錄,可以看到hello-world-0.0.1-SNAPSHOT.jar和original-hello-world-0.0.1-SNAPSHOT.jar,前者是帶有Main-Class資訊的可執行jar,後者是原始的jar
開啟hello-world-0.0.1-SNAPSHOT.jar的META-INF/MANIFEST.MF,可以看到包含這樣一樣資訊:
Main-Class: com.juvenxu.mvnbook.helloworld.HelloWorld
現在在專案根目錄中執行該jar檔案
# java -jar target\hello-world-0.0.1-SNAPSHOT.jar
控制檯輸出了Hello Maven
到此這篇關於Maven打包和執行的文章就介紹到這了,更多相關Maven打包和執行內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!