1. 程式人生 > >Maven使用說明及idea上的Maven專案程式設計

Maven使用說明及idea上的Maven專案程式設計

搞了一天總算是基本學會了idea上用Maven管理Web應用的開發,因為idea也是最近一兩年才崛起,之前基本是eclipse的編寫,現在網上Maven的視訊教程幾乎全是用eclipse教的,能搜到的教idea上Maven專案的部落格也是很少的,就此記錄下學習的全過程。

Maven的簡介:

比較正式的說明:Maven是一個專案管理和綜合工具。Maven提供了開發人員構建一個完整的生命週期框架。開發團隊可以自動完成專案的基礎工具建設,Maven使用標準的目錄結構和預設構建生命週期。
在多個開發團隊環境時,Maven可以設定按標準在非常短的時間裡完成配置工作。由於大部分專案的設定都很簡單,並且可重複使用,Maven讓開發人員的工作更輕鬆,同時建立報表,檢查,構建和測試自動化設定。

用中國話說:當專案龐大的時候,需要匯入的jar包很多,這些之間也可能有重複和冗餘,檔案之間也有很多依賴關係,Maven就是集中管理jar包和依賴關係的一個工具,可以使得開發更便利高效

如果還沒配置好Maven和idea上Maven相關設定的可以看我之前寫的文章:點選開啟連結

首先來到idea的file目錄下選擇new一個project,這樣選擇


點next


起名的一般規則:GroupId如果是企業專案就是com.+專案名,否則是org.+專案名,ArtifactId填專案名字,點next


點旁邊綠色的加號,加一個這個東西可以使你的專案載入快一些,其他保持預設設定後next,然後也是保持預設設定點finish

就會自動幫你配置maven專案,如果是第一次建立專案可能要等比較久下載一些東西,後面會更快一些,我的等了差不多一兩分鐘。。。不知道是不是電腦太爛


然後建立成功的目錄結構有些不完整,我們需要手動加入一些東西:


加入的東西通過在父目錄右擊new directory建立相應名字的檔案,然後也是右擊創好的檔案mark  directory as調成我上面圖形的樣子,說明一下,java目錄下放你專案的package包,package包下放你的java檔案,因為專案中會用到JUnit來單元測試,那麼java類中生成的對應的JUnit的類就應該放在test檔案的java目錄下的package包中,然後就可以開始寫程式了

然後說一下maven的命令:

maven的命令格式都是mvn+空格+命令

-v 檢視maven版本

compile 編譯當前專案

test 測試當前專案

package  將當前maven管理的專案打包

clean 刪除上一次生成的target檔案,裡面有各種配置檔案

install 安裝xml中程式碼指向的jar包到本地倉庫

然後摘取一些慕課網的筆記..雖然現在還蠻多不是很明白,先收集起來以後看看:

pom.xml常用標籤元素:
 modelVersion  指定了當前pom版本
 groupId    反寫的公司網址+專案名
artifactId  專案名+模組名
version     版本號  第一個0表示大版本號,第二個0表示大版本號,第三個0表示大版本號 0.0.1snapshot快照
packaging   打包方式 預設是jar

name       專案的描述名
url       專案的地址
description  專案描述
developers   開發人員資訊
licenses    許可證資訊


dependencies 
dependency
scope    依賴範圍
optional  設定依賴是否可選
exclusion   

dependencyManagement   依賴管理  不會被執行
build   
  plugins  外掛列表(指出座標)
parent    對父模組的繼承
modules   定義多個模組  一起進行編譯

dependency scope:指定依賴範圍
 --compiler:預設的範圍,編譯測試執行都有效
 --provided:編譯測試時有效
 --runtime:測試和執行時有效
 --test:測試時有效
 --system:與本機系統相關聯,可移植性差
 --import:匯入的範圍,只在dependencyManagement中使用,表示從其他的pom中匯入dependency的配置
依賴具有傳遞性所以如果需要去除不需要的依賴則
<exclusions>
<groupId>專案ID</groupId>
<artifactID>專案名+模組名</artifactID>
</exclusions>
依賴衝突的解決
1.短路優先:
A->B->X(v1.0),A->C->D->X(v2.0)
A-->X(v1.0)
2.宣告順序:
A->B->X(v1.0),A->C->X(v2.0),A-pom.xml: ... <dep C> <dep B> ... 
A-->X(v2.0)
路徑長度相同時,哪個dependency先在pom.xml宣告,哪個就優先
繼承
1.應用場景:元件聚合時,多個元件使用相同的依賴導致聚合後出現重複,使用一個父元件定義該依賴,然後有需要的元件繼承該元件,聚合時就不會重複
2.父元件定義依賴
在父元件-->dependencyManager-->dependencies下定義dependency
注意,dependencyManager下定義的dependency,該元件不依賴
3.繼承父元件
parent標籤下引用父元件的座標
建立dependency引用,只有groupId和artifactId子元素
繼承 子pom.xml的寫法,先
<parent>
<groupId>專案ID</groupId>
...
...
<parent>
聚合(將多個模組聚合)
1.建立聚合專案 proj-aggreation
2.packaging為pom
3.使用modules定義要聚合的模組
<modules>
<module>../proj-m1</module>
<module>../proj-m2</module>
</modules>

關於maven的原理和指令的一些細節我在慕課網上講網課看了幾遍也不是特別理解。。就不說了吧,我就說下我現在掌握的maven的基本使用方法

來到pom.xml,maven的主要實現就是通過修改這個檔案來對jar包和依賴關係進行控制

從上往下我們就說幾個重要的引數來快速掌握maven用法:

  <groupId>org.xxx</groupId>
  <artifactId>exam</artifactId>
  <packaging>war</packaging>
前兩個標籤groupid和artifactid相當於當前專案的橫縱座標一樣,對依賴關係的設定也是通過該引數實現的,packaging引數表示打包的方法,上面慕課網筆記中有
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
這些引數聲明瞭當前專案的依賴關係,也就是需要匯入這些包,

groupId,artifactId,version這三個引數在匯入外來的jar包時必不可少,準確的表述了匯入的jar包,以便於maven在倉庫中查詢,scope表示該包的作用範圍,上面慕課網的筆記總有教

在build標籤中寫上plugins標籤下plugin中可以寫三個引數,然後使用mvn的install命令,maven會在本地倉庫中找是否有該引數的jar包,如果沒有他會去setting那指定的全球倉庫中找,找到了就會下載到當前專案,再通過上面的依賴設定就可以使用了

<build>
    <plugins>
      <plugin>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
      </plugin>
    </plugins>
  </build>
我覺得下完了應該可以刪了這段程式碼OAO

然後下面是我寫的一個測試maven的程式:

pom.xml:

<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>org.xxx</groupId>
  <artifactId>exam</artifactId>
  <packaging>war</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>exam Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>compile</scope>
    </dependency>
  </dependencies>
  <build>
    <plugins>
      <plugin>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
      </plugin>
    </plugins>
  </build>
</project>
寫好這個點選idea左下角的一個小框框,選Terminal調出終端

輸入mvn clean package會自動清除之前的記錄並編譯打包程式,再

mvn install把打包好的配置環境安裝進本專案,這段程式碼是會在倉庫找junit的4.12版本,沒找到就會去中央庫下,然後加進本專案,然後這裡提供一個用於查詢所需要jar包引數的網站:http://mvnrepository.com/
然後也是點左下角,選擇maven projects右邊會彈出來一個工作框,點框左上角的重新整理重新整理一下就可以看到配置好的環境以及加入本專案了

然後我寫了個測試類:

say.java:

package exm;
public class say {
    public String sayHello()
    {
        return "Hello";
    }
}
sayTest.java:
package test;

import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import exm.say;

/** 
* say Tester. 
* e
* @author <Authors name> 
* @since <pre>一月 6, 2018</pre> 
* @version 1.0 
*/ 
public class sayTest { 

@Before
public void before() throws Exception { 
} 

@After
public void after() throws Exception { 
} 

/** 
* 
* Method: sayHello() 
* 
*/ 
@Test
public void testSayHello() throws Exception { 
//TODO: Test goes here...
    Assert.assertEquals("Hello",new say().sayHello());
} 
} 
然後這是他們應該放的位置,注意目錄結構:


點run all Test就可以完成測試了。。