本篇記錄一下maven在命令行的構建方法,後面講在idea怎麼用。
參考 這裏 有詳細的maven教程。
創建maven項目
最基本的maven項目創建命令如下
mvn archetype:generate -DgroupId={{your_companyName}} -DartifactId={{your_projectName} -DarchetypeArtifactId=maven-archetype-quickstart
根目錄下有一個pom.xml,用來編寫maven的配置(如依賴包)
詳細創建指令如下:
mvn archetype:create或者mvn archetype:generate 是固定寫法,兩者幾乎無區別。
額外參數如下:
-DgroupId 組織標識(包名)
-DartifactId 項目名稱
-DarchetypeArtifactId 指定ArchetypeId,maven-archetype-quickstart,創建一個Java Project;maven-archetype-webapp,創建一個Web Project
-DinteractiveMode 是否使用交互模式
archetype是mvn內置的一個插件,create任務可以創建一個java項目骨架,DgroupId是軟件包的名稱,DartifactId是項目名,DarchetypeArtifactId是可用的mvn項目骨架,目前可以使用的骨架有:
maven-archetype-archetype
maven-archetype-j2ee-simple
maven-archetype-mojo
maven-archetype-portlet
maven-archetype-profiles (currently under development)
maven-archetype-quickstart
maven-archetype-simple (currently under development)
maven-archetype-site
maven-archetype-site-simple
maven-archetype-webapp
每一個骨架都會建相應的目錄結構和一些通用文件,最常用的是maven-archetype-quickstart和maven-archetype-webapp骨架。maven-archetype-quickstart骨架是用來創建一個Java Project,而maven-archetype-webapp骨架則是用來創建一個JavaWeb Project。
添加項目依賴
修改pom.xml 文件。例如想增加json解析包,在https://mvnrepository.com 這個網站搜索,然後複製maven配置進去。
https://mvnrepository.com/artifact/org.json/json/20180813
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20180813</version>
</dependency>
.....
</dependencies>
默認項目的依賴包下載
完後都放在 C:\Users\Administrator.m2\repository 目錄下。需要修改依賴包的下載目錄的話在 $MAVEN_HOME$\conf\settings.xml 這個文件下修改。
編譯項目
mvn compile
會下載依賴包,然後編譯項目。默認編譯結果在target/classes目錄下,結果爲.class文件。
打包jar
jar是java的包,可以其他項目應用。
命令: mvn package
這個命令會先compile項目,生成classes,然後在把class壓縮到一起生成一個jar包。
清理
mvn clean
清理target目錄的編譯文件。
部署
命令: mvn install
過程: 【清理】→【編譯】→【測試】→【打包】→ 【安裝】
安裝過程就是把.jar相關文件複製到本地倉庫裏。
運行
通過java命令可以運行.class文件,也可以運行.jar文件。
需要注意的點:
- src源碼的類有多少個main都無所謂(這與c/c++項目不一樣)
- 通過java命令運行的時候需要指定運行哪一個類
- jar或class有第三方依賴包的或需要指定依賴包的位置。
java命令的幾個重要參數
例如:我現在有2個java文件,編譯成jar文件。
App.java如下:(有第三方包)
package com.hhk;
import org.json.JSONObject;
public class App {
public static void main(String[] args) {
JSONObject out = new JSONObject();
out.put("type", "message");
System.out.println(out.toString());
}
}
App2.java如下:
package com.hhk;
/**
* Hello world!
*
*/
public class App2 {
public static void main(String[] args) {
System.out.println("Hello world");
}
}
pom.xml文件部分如下:
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20180813</version>
</dependency>
</dependencies>
</dependencies>
運行命令mvn package
打包jar之後。(打包爲testmvn.jar)
先運行App2.java的主函數,命令爲(-cp 和 -classpath一致,表示要加載的jar文件或.class)
java -cp testmvn-1.0-SNAPSHOT.jar com.hhk.App2
App.java依賴json20180813.jar(加載多個.jar)
java -cp "testmvn-1.0-SNAPSHOT.jar;C:\Users\Administrator\.m2\repository\org\json\json\20180813\json-20180813.jar" com.hhk.App
pom.xml
pom.xml文件的節點元素說明:
<project> pom文件的頂級節點
<modelVersion> object model版本,對Maven2和Maven3來說,只能是4.0.0
<groupId> 項目創建組織的標識符,一般是域名的倒寫
<artifactId> 定義了項目在所屬組織的標識符下的唯一標識,一個組織下可以有多個項目
<version> 當前項目的版本,SNAPSHOT,表示是快照版本,在開發中
<packaging> 打包的方式,有jar、war、ear等
<name> 項目的名稱
<url> 項目的地址
<properties> 屬性配置,比如:<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<dependencies> 構建項目依賴的jar