编写POM
Maven的核心是pom.xml,POM(Project Object Model)定义了项目的基本信息,用于描述项目如何构建,声明项目依赖等。
创建hello-world文件夹,在其内建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.ran.mvnbook</groupId>
<artifactId>hello-world</artifactId>
<version>1.0-SNAPSHOT</version>
<name>Maven laborMkt Project</name>
</project>
注:project是所有pom.xml的根元素
modelVersion指定了当前POM模板的版本,对于Maven2和Maven3来说,它只能是4.0.0
groupId定义了项目属于哪个组,这个组往往和所在组织和公司有关
artifactId定义了当前Maven项目在组中的唯一ID
version指定了HelloWorld项目当前的版本
编写主代码
src/main/java目录下
package com.ran.mvnbook.helloworld;
public class HelloWorld{
public String sayHello(){
return "hello maven";
}
public static void main(String[] args){
System.out.println(new HelloWorld().sayHello());
}
}
项目根目录下运行命令 mvn clean compile
clean 告诉Maven清理输出目录target/,默认情况下,Maven构建的所有输出都在target目录中,compile告诉Maven编译项目主代码
编写测试代码
src/test/java目录下
package com.ran.mvnbook.helloworld;
import static org.junit.Assert.assertEquals;
import org.junit.Test;
public class HelloWorldTest{
@Test
public void testSayHello(){
HelloWorld helloworld = new HelloWorld();
String result = helloworld.sayHello();
assertEquals("hello maven",result);
}
}
修改POM代码,增添Junit依赖
<?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.ran.mvnbook</groupId>
<artifactId>hello-world</artifactId>
<version>1.0-SNAPSHOT</version>
<name>Maven laborMkt Project</name>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
执行测试,运行 mvn clean test
打包和运行
打包运行mvn clean package
不过这种包为不可执行包需修改POM,增添maven-shade-plugin
<?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.ran.mvnbook</groupId>
<artifactId>hello-world</artifactId>
<version>1.0-SNAPSHOT</version>
<name>Maven laborMkt Project</name>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.2</version>
<executions>
<execution>
<phase>package</phase>
<goals><goal>shade</goal></goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.ran.labor.helloworld.HelloWorld</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
再次运行mvn clean package
target下有两个jar包hello-world-1.0-SNAPSHOT.jar和original-hello-world-1.0-SNAPSHOT.jar,前者是带有Main-Class信息的可运行jar,后者为原始jar
运行java -jar hello-world-1.0-SNAPSHOT.jar 控制台输出hello maven
成功!