本篇记录一下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