maven如何編譯(陳老師精講一看就懂)
陳老師說了,沒強調的意味著現在不要花精力去研究,會用即可。後面不斷用它自然不就會了嗎。
maven被陳老師講完之後簡直太特麼簡單了,以下是步驟:
1. eclipse- new project--maven 建立maven專案
2. 一直next即可,group id就是公司名,aritfactId就是模組名,version隨便輸入0.0.1或者1.0.0,package選你給我打成jar包,然後它會讓你選模板,模板選一個quick-start,它就是包含一些基本的東西讓我們快速開始。
以後要建立web或者其他專案,再選其他模板。
3. maven建立好了,怎麼用呢?
比方說,你已經知道你打算用一個類了,那你肯定知道它的類名,現在把它的類名輸入到 【maven central repo】https://search.maven.org 這個網址的搜尋欄裡,你就可以獲得它的maven寫法。
4. maven寫法如下:
group id就是公司名
artifactId就是模組名、專案名
version就是版本號
<dependency>
<groupId>ch.cern.hadoop</groupId>
<artifactId>hadoop-common-project</artifactId>
<version>2.7.5.1</version>
<type>pom</type>
</dependency>
dependency為什麼會有type為pom,預設的值是什麼?
dependency中type預設為jar即引入一個特定的jar包。那麼為什麼還會有type為pom呢?當我們需要引入很多jar包的時候會導致pom.xml過大,我們可以想到的一種解決方案是定義一個父專案,但是父專案只有一個,也有可能導致父專案的pom.xml檔案過大。這個時候我們引進來一個type為pom,意味著我們可以將所有的jar包打包成一個pom,然後我們依賴了pom,即可以下載下來所有依賴的jar包。
【簡單來說就是把pom給你,jar包會自動被下載下來。】
5. maven工具使用(高階程式設計師都直接mvn package編譯打包,不需要eclipse或者只把eclipse當成編輯器,就和用notepad一樣)
你可以下載一個maven下來,無需安裝直接解壓。
然後你可以用Notepad直接寫程式碼,或者選eclipse下面的一個專案。
程式碼或者專案準備好之後,
進cmd cd到eclipse專案的目錄下 比如c:\workspace\hdfs
然後輸入 c:\tools\maven\bin mvn package (如果你沒設定mvn的環境變數,你就需要輸入完整的bin目錄來執行mvn)
進入到bin目錄執行mvn(mvn的程式)package進行編譯打包,編譯大家都懂的,mvn package得到的結果是一個jar包。
編譯完成的.class
檔案將會出現在target/classe
目錄下,具體資料夾就是c:work hdfs \target\hdfs-0.0.1.jar。
6. mvn其他命令
mvn install package 本地倉庫中安裝這個jar包(暫時還不懂有啥用)
mvn clean package 清除剛才生成的專案
7. fat jar
顧名思義就是胖包,就是把一個專案的檔案和他所依賴的jar都打包成一個jar。
以下是fat.jar在maven的pom.xml中的實現(暫時沒時間看,用到再說)
問題
在使用“mvn package”命令編譯application之後,生成的.jar檔案不能直接被“java -jar”命令執行,一般都是因為:
1. Manifest中沒有主清單屬性。
2. 依賴項在.jar檔案中不存在。
這兩個問題可以通過在pom.xml中增加build plugin來解決。
方法1
使用maven-assembly-plugin來打包fat-jar。
假設我們的application的Main Class是practice.spring.sprice.App,那麼我們需要在pom.xml中增加如下一段:
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<archive>
<manifest>
<mainClass>practice.spring.sprice.App</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
這種方法打包出來的.jar中:
1. practice.spring.sprice.App會被作為主類。
2. 包含所依賴的所有jar的內容(這些jar包會被解開)。
方法2
使用spring-boot-maven-plugin來打包fat-jar。
在pom.xml中增加如下一段:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>1.5.6.RELEASE</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
這種方法打包出來的.jar中:
1. org.springframework.boot.loader.JarLauncher會被作為主類,它會自動呼叫應用程式中的main方法。
2. 包含所依賴的所有的jar包(這些jar包不會被解開)