maven构建项目的默认约定为:
|- -src
|- -main
|- -java (此包下放java源码)
|- -resources (此包下放资源文件等)
|- -test
|- -java (此包下放测试所需的java源码)
|- -resources (此包下放测试所需资源文件等)
|- -target (字节码输出目录)
|- -pom.xml (maven项目管理配置文件)
因此,只要遵循maven约定,我们自己也可以手工构建项目,下面介绍三种方式来学习maven,第一种手工构建普通的maven项目,第二种则为利用maven相关构建项目 的插件,第三种则为在eclipse集成环境中借助插件来实现。
1, 创建maven项目约定目录结构
2,编写java主代码
首先在上图中src/main/java下创建几层目录,即为src/main/java/com/mapc/hellomaven/hm-mod1,其中com.mapc.hellomaven则符合maven坐标groupId命名规范,hm-mod1则符合maven坐标artifactId命名规范。代码如下:
//package com.mapc.hellomaven.hm-mod1;这里犯了很低级的错误,命名不能中横线,改成如下
package com.mapc.hellomaven.hmmod1;
public class HelloMaven
{
public void sayHello( )
{
System.out.println( "Hello Maven!" );
}
}
3, 编写测试代码
首先在上图中src/main/java下创建几层目录,即为src/test/java/com/mapc/hellomaven/hm-mod1,其中com.mapc.hellomaven则符合maven坐标groupId命名规范,hm-mod1则符合maven坐标artifactId命名规范。特别注意,maven默认约定主代码类和相关的测试类的package生成是一样的。代码如下:
//package com.mapc.hellomaven.hm-mod1;这里犯了很低级的错误,命名不能中横线,改成如下
package com.mapc.hellomaven.hmmod1;
import org.junit.Test;
public class HelloMavenTest {
@Test
public void test(){
HelloMaven hm=new HelloMaven();
hm.sayHello();
}
}
4,写maven项目配置文件pom.xml,并且放在hellomaven项目跟目录下。
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0modelVersion>
<groupId>com.mapc.hellomavengroupId>
<artifactId>hm-mod1artifactId>
<version>0.0.1-SNAPSHOTversion>
<packaging>jarpackaging>
<name>hm-mod1name>
<url>http://maven.apache.orgurl>
<properties>
<project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
properties>
<dependencies>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.10version>
<scope>testscope>
dependency>
dependencies>
project>
5,使用mvn clean compile命令编译maven项目
首先打开dos命令窗口,进入项目根目录。
输入mvn clean compile编译项目。但是很不幸,结果并不像我想象中那样,出现了编译异常,异常情况如下:
6,使用mvn clean test命令进行测试
7,使用mvn clean package打包
打包后会在target目录生成一个命名为”artifactId-version.jar”的jar(maven默认打包生成jar)。
8,使用mvn clean install安装
使用此命令后,打包的jar会被安装到本地仓库中,可以供别的项目使用。
9,运行打包的jar
默认打包生成的jar并不是可执行jar。可执行jar的META-INF/MANIFFEST.MF文件中至少有一行配置-Main-Class,这个Main-Class的值为带有main方法的类的全限定类名,也就是指定了这个jar的程序入口(了解更多可执行jar,请参考《jar文件的深入认识》)。为了达到这样的目的,还必须依赖一个maven插件maven-shade-plugin。在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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0modelVersion>
<groupId>com.mapc.hellomavengroupId>
<artifactId>hm-mod1artifactId>
<version>0.0.1-SNAPSHOTversion>
<packaging>jarpackaging>
<name>hm-mod1name>
<url>http://maven.apache.orgurl>
<properties>
<project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
properties>
<dependencies>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.10version>
<scope>testscope>
dependency>
dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-shade-pluginartifactId>
<version>2.4version>
<executions>
<execution>
<phase>packagephase>
<goals>
<goal>shadegoal>
goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>
com.mapc.hellomaven.hmmod1.HelloMaven
mainClass>
transformer>
transformers>
configuration>
execution>
executions>
plugin>
plugins>
build>
project>
执行mvn clean package打包即可生成可执行jar。
打开命令行,进入项目空间下,输入命令:mvn archetype:generate,dos窗口会进入交互模式,主要过程如下:
[INFO] Generating project in Interactive mode (卡了一会,原因:联网取项目模板)
[INFO] No archetype defined. Using maven-archetype-quickstart (org.apache.maven.archetypes:maven-archetype-quickstart:1.0)
Choose archetype:
... (这里会自动列出很多项目模板,每种模板前面会有一个数字序号)
336: remote -> org.apache.maven.archetypes:maven-archetype-quickstart (An archetype which contains a sample Maven project.)
...
Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): 336: (这里根据每个人机器上安装的eclipse插件不同,可能默认的数字不是这个,先不管,直接回车)
Choose org.apache.maven.archetypes:maven-archetype-quickstart version:
1: 1.0-alpha-1
2: 1.0-alpha-2
3: 1.0-alpha-3
4: 1.0-alpha-4
5: 1.0
6: 1.1
Choose a number: 6: (直接回车)
Define value for property 'groupId': : com.mycompany.myapp (公司名.项目名)
Define value for property 'artifactId': : myapp-mod1 (项目名-模块名,通常指子项目或者子模块)
Define value for property 'version': 1.0-SNAPSHOT: : (版本号,默认1.0-SNAPSHOT,直接回车)
Define value for property 'package': com.mycompany.myapp: :com.mycompany.myapp.mod1 (选择默认的也可)
Confirm properties configuration:
groupId: com.mycompany.myapp
artifactId: myapp-mod1
version: 1.0-SNAPSHOT
package: com.mycompany.myapp.mod1
Y: : (直接回车)
[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating project from Old (1.x) Archetype: maven-archetype-quickstart:1.1
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: groupId, Value: com.mycompany.myapp
[INFO] Parameter: packageName, Value: com.mycompany.myapp.mod1
[INFO] Parameter: package, Value: com.mycompany.myapp.mod1
[INFO] Parameter: artifactId, Value: myapp-mod1
[INFO] Parameter: basedir, Value: D:\projects\demows1
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] project created from Old (1.x) Archetype in dir: D:\projects\demows1\myapp-mod1
...
[INFO] BUILD SUCCESS (项目创建成功!)
...
看截图:
清除,编译,打包,安装,运行等一系列操作和第一种手工生成maven项目中的一样,这里不再列出。
本博文主要参考博文和学习书籍如下:
1,《Maven实战》(书-PDF版本)
2,点击去看大神对jar和可执行jar的深入剖析
3,《maven学习(上)- 基本入门用法》(系列博文)