Maven實戰學習筆記 3.Maven使用入門

   在安裝好Maven後,編寫一個簡單的不依賴IDE的Hello World項目。

3.1 編寫pom文件

        Maven項目的核心是pom.xml文件,創建一個Hello-word文件夾,在下面新建一個pom.xml文件,內容如下。
<?xml version = "1.0" encoding = "UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.liuxm.test</groupId>
  <artifactId>hello-word</artifactId>
  <version>1.0-SNAPSHOT</version>
  <name>Maven Hello World Project</name> 
</project>
        modelVersion指定了當前pom的版本。
        groupId定義了項目屬於哪個組。
        artifactId定義了當前Maven項目在組中的唯一id.
        version指定了當前項目的版本。
groupId,artifactId,version定義了一個項目的基本座標。‘

3.2 編寫java程序代碼

    默認情況下,Msven假設項目主代碼位於src/main/java目錄下,首先按照約定,創建該目錄,然後在該目錄下創建HelloWorld.java文件。
(G:\studyVideo\maven\hello-word\src\main\java\com\liuxm\test\HelloWorld.java)
package com.liuxm.test;

public class HelloWorld{
   public String sayHello(){
	   return "Hello World";
   }
   
   public  static void main(String[] args){
	   System.out.println(new HelloWorld().sayHello());
   }
}
注意:
1、應該講項目主代碼放到src/main/java/目錄下(遵循java的約定),而無需額外的配置,Maven會自動搜尋該目錄找到項目主代碼。
2、java的包名儘量與pom.xml文件中groupId吻合,這樣結構比較清晰。
代碼編寫完畢後,進行編譯,在主目錄下mvn clean compile

clean告訴Maven清理輸出目錄target,compile告訴Maven編譯項目主代碼。
從輸出中看到Maven首先執行clean任務,刪除target/目錄,默認情況下,Maven構建的所有輸出都在target/目錄下。
                                     然後執行resource任務,由於沒有定義此項,所以跳過了。
                                     最後執行compile任務,將項目代碼編譯到target/classes目錄。
上面提到的clean是clean插件的clean目標,compile是compiler插件的compile目標。
編譯後主目錄:

3.3 編寫測試代碼

        爲了項目結構清晰,主代碼與測試代碼分別位於不同的目錄下,Maven默認的測試代碼的目錄是src/test/java。因此,在編寫測試用例之前,
應當先創建該目錄。
       在java的世界裏,JUnit是事實上的單元測試的標準。要使用JUnit,首先需要爲Hello World項目添加一個JUnit依賴。
pom.xml文件修改爲:
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"></span><pre name="code" class="java"><?xml version = "1.0" encoding = "UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.liuxm.test</groupId>
  <artifactId>hello-word</artifactId>
  <version>1.0-SNAPSHOT</version>
  <name>Maven Hello World Project</name> 
  <dependencies>
      <dependency>
	      <groupId>
		      junit
		  </groupId>
		  <artifactId>
		      junit
		  </artifactId>
		  <version>
		      4.7
		  </version>
		  <scope>
		      test
		  </scope>
	  </dependency>
  </dependencies>
  <build>
      <plugins>
	      <plugin>
		      <groupId>
			      org.apache.maven.plugins
			  </groupId>
			  <artifactId>
			      maven-compiler-plugin
			  </artifactId>
			  <configuration>
			      <source>1.5</source>
				  <target>1.5</target>
			  </configuration>
		  </plugin>
	  </plugins>
  </build>
</project>

        代碼添加dependencies元素,該元素下可以包含多個dependency元素聲明項目的依賴。這裏添加了依賴,groupId ,artifactId,version是4.7.

前面提到groupId,artifactId和version是任何一個maven項目的基本座標,有了這段聲明,Maven就能夠自動下載junit-4.6.jar從中央倉庫
(http://repo1.maven.org/maven2),下載需要的文件。
        上面的pom文件還增加了scope元素,scope是依賴範圍,若依賴範圍爲test,則表示該依賴僅對測試有效。所以,在測試代碼中使用junit是可以
的,但是在主代碼中使用junit就會編譯報錯。
       由於歷史原因,Maven核心插件只支持1.3,所以配置增加build配置項來支持java1.5。
       接下來測試一下,HelloWorld類的sayHello方法,在srt/test/java下創建java文件。
package com.liuxm.junit;

import static org.junit.Assert.assertEquals;
import org.junit.Test;
import com.liuxm.test.HelloWorld;

public class HelloWorldTest
{
	@Test
	public void testSayHello()
	{
	    HelloWorld helloworld = new HelloWorld();
        String result = helloworld.sayHello();
        assertEquals("Hello World",result);		
	}
}
在主目錄下:運行mvn clean test命令。


3.4 打包與運行

    運行命令: mvn clean package   可以看到下面的輸出,默認打包類型爲jar。
    
         Maven會在打包之前執行編譯,測試等操作,這裏jar任務負責打包,實際上就是jar插件的jar目標將項目主代碼打包成一個名爲
hello-word-1.0-SNAPSHOT.jar的文件,命名格式爲artifactId-version.jar,如果有需要就可以把這個jar文件複製到其他項目的classPath
中,從而使用HelloWorld類。但是如何才能讓其他的Maven項目直接引用這個jar呢? 這裏需要執行一個安裝步驟,執行
mvn clean install 命令將jar包安裝到本地倉庫。
   
         從輸出可以看到,該任務將hello-word 項目的pom文件及jar包安裝到了本地的倉庫,這樣其他的項目可以通過pom文件直接
對hello-world項目進行引用了。
       目前爲止:已經使用了mvn clean compile,mvn clean test,mvn clean package, mvn clean install.執行test之前會先執行compile。
執行package之前會先執行test,在執行install之前會先執行package,可以在任何項目中使用這些命令。
         然而,還沒有運行HelloWord項目,在HelloWorld類裏面可是有一個main方法的。默認打包生成的jar是不能直接運行的,因爲
帶有main方法的類信息不會添加到manifest中(Jar中的MANIFEST.MF是一種告示文件Manifest file 用來聲明該包採用的技術標準和
所需的運行環境等參數。運行環境先從MF中讀取這些參數,如果能滿足就運行,不然就提示不能滿足條件)。
        如果需要生成可執行的jar包,需要藉助maven-shade-plugin,配置插件方式如下:
          <plugin>  
                <groupId>org.apache.maven.plugins</groupId>  
                <artifactId>maven-shade-plugin</artifactId>  
                <version>1.2.1</version>  
                <configuration>  
                    <createDependencyReducedPom>false</createDependencyReducedPom>  
                </configuration>  
                <executions>  
                    <execution>  
                        <phase>package</phase>  
                        <goals>  
                            <goal>shade</goal>  
                        </goals>  
                        <configuration>  
                            <transformers>  
                                <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">  
                                    <mainClass>com.liuxm.test.HelloWorld</mainClass>  
                                </transformer>  
                            </transformers>  
                        </configuration>  
                    </execution>  
                </executions>  
            </plugin> 
 然後在運行:mvn clean install   項目在打包時會將mainclass信息放到manifest.mf文件裏面,打開target可以看到裏面有hello-word-1.0-SNAPSHOT.jar
與original-hello-word-1.0-SNAPSHOT.jar,前者是可運行的jar,後者是原始jar,打開hello-word-1.0-SNAPSHOT.jar可以在manifest.mf文件中看到如下信息:
Manifest-Version: 1.0
Build-Jdk: 1.6.0_21
Built-By: Administrator
Created-By: Apache Maven 3.2.1
Main-Class: com.liuxm.test.HelloWorld
Archiver-Version: Plexus Archiver
文件中已經包含了
Main-Class: com.liuxm.test.HelloWorld
接下來在根目錄下執行這個jar文件:


3.5 使用Archetype生成項目骨架

    運行:mvn  archetype:generate
    選擇版本:
   
會自動在當前運行命令的目錄下生成Maven工程的框架。

3.6 eclipse下maven的使用

3.6.1 Maven 插件安裝

        我這裏就不贅述插件的安裝過程了,推薦大家一個鏈接:http://blog.csdn.net/wode_dream/article/details/38052639
由於我32位系統下下載的eclipse版本爲eclipse-jee-mars-2-win32,默認已經安裝了。


  將使用的Maven修改爲我們自己電腦上安裝的Maven,不要使用IDE內嵌的,內嵌的可能不穩定:


3.6.2 導入Maven項目

   FIle->import->Maven->Existing  Maven Projects  ,在瀏覽時只需要選擇已經導入工程的根目錄(即包含pom.xml)的那個目錄。

3.6.3  創建Maven項目

    File->New->Other  在彈出的對話框選擇Maven Project,輸入Group Id ,ArtifictId ,Version 後Finish.

3.6.4  運行Mvn命令

    工程右鍵->run as 可以看到 maven test,maven package,maven 等常用的命令。
    也可以在run as->run configurations->雙擊Maven build 在Goals裏面輸入需要執行的任務。

 
發佈了124 篇原創文章 · 獲贊 32 · 訪問量 67萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章