1. 程式人生 > >maven如何編譯(陳老師精講一看就懂)

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包不會被解開)