概括:
本案例在于构建一个简单的基于maven的java项目
- 熟悉maven项目结构
- 使用maven各个声明周期mvn命令构建项目
- 添加单元测试到maven项目中
1. 准备java项目
目录结构
- 一个完整的基于mavan的java项目目录结构至少拥有以下目录结构
pom.xml依赖
- <dependency>的<scope>元素:
- scope默认为compile,也就是说所有依赖项作用域都是compile依赖,他们应该在编译时是可用的,如构建一个war文件,那么编译时就应该被添加到war文件的/WEB-INF/libs目录中;
- scope除compile外,其他枚举有:
- provided:编译项目代码需要的依赖项,他们会在运行时由运行代码的容器(如tomcat)提供,如Java Servlet API;
- test:编译和运行测试时的依赖项,但是构建和运行项目代码时是不必要的
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<!-- pom model的版本 -->
<modelVersion>4.0.0</modelVersion>
<!-- 项目所属的组组名,通常是域名反写 -->
<groupId>com.example</groupId>
<!-- 为项目类库artifact命名,如jar包或war包的名称 -->
<artifactId>demo_java</artifactId>
<!-- 项目应该打包成什么类型,jar包是jar,war包则是war -->
<packaging>jar</packaging>
<!-- 构建项目的版本 -->
<version>0.1.0</version>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.4</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>hello.HelloWorld</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
Java源代码:
HelloWorld.java
- 应用main方法入口
package hello;
import org.joda.time.LocalTime;
public class HelloWorld{
public static void main(String[] args){
LocalTime currentTime = new LocalTime();
System.out.println("The current local time is: " + currentTime);
Greeter greeter = new Greeter();
System.out.println(greeter.sayHello());
}
}
Greeter.java
- 测试相关类
package hello;
public class Greeter{
public String sayHello(){
return "Hello world!";
}
}
GreeterTest.java
- 添加junit单元测试
- maven使用surefire进行单元测试
package hello;
import static org.hamcrest.CoreMatchers.containsString;
import static org.junit.Assert.*;
import org.junit.Test;
public class GreeterTest{
private Greeter greeter = new Greeter();
@Test
public void greeterSayHello(){
assertThat(greeter.sayHello(), containsString("Hello"));
}
}
2. 源代码构建
按照上述目录架构和文件创建完整项目;
然后命令行切换到项目根目录使用maven相关命令构建项目的可执行jar文件;
这里执行以下命令构建可执行jar包:
mvn install
注:mvn各个lifecycle命令执行内容
- mvn clean:
- maven-clean-plugin
- mvn compile:
- maven-resources-plugin::resources
- maven-compiler-plugin::compile
- mvn test:
- maven-resources-plugin::resources
- maven-compiler-plugin::compile
- maven-resources-plugin::testResources
- maven-compiler-plugin::testCompile
- maven-surefire-plugin::test
- mvn package:
- maven-resources-plugin::resources
- maven-compiler-plugin::compile
- maven-resources-plugin::testResources
- maven-compiler-plugin::testCompile
- maven-surefire-plugin::test
- maven-jar-plugin::jar
- mvn install:
- maven-resources-plugin::resources
- maven-compiler-plugin::compile
- maven-resources-plugin::testResources
- maven-compiler-plugin::testCompile
- maven-surefire-plugin::test
- maven-jar-plugin::jar
- maven-shade-plugin::shade
- maven-install-plugin::install
3. 结果
日志中打印"BUILD SUCCESS"表示成功;
打开本地maven资源库,查看jar包是否已经上传到对应位置