一、新建工程
1.1 什么是m2eclipse
m2eclipse就是eclipse内置的maven插件。
1.2 maven约定
maven相比其它项目,约定了一些固定格式的目录,可以简化配置。当然,也可以不遵循这些默认约定,但有时候需要修改一些配置项。默认约定如下:
- pom.xml。放在根目录中。
- 主代码。放在src/main/java下。
- 测试代码。放在src/test/java下。
- 输出目录。根目录/target/
1.3 新建工程与Archetype
在构建maven项目时,手动创建各种目录来遵循默认约定是可行的,但这种重复性质的工作可以被简化,即使用maven的archetype来快速勾勒项目骨架。
命令行版本(maven 3),运行
mvn archetype:generate
然后选择archetype,并输入groupId、artifactId、version、package。
eclipse版本。
IDE自动会使用maven-archetype-plugin插件创建项目。即New一个Maven Project,选择maven-archetype-quickstart,输入groupId、artifactId、version、package。
图文详见上一篇Maven安装与入门
除了使用简单现成的archetype,也可以开发自己的archetype,用自定义版本快速生成项目骨架。这部分属于进阶内容。
二、编写代码
2.1 主代码
随便写个hello world程序。例如
/**
* Hello world!
*
*/
public class Hello
{
public String sayHello() {
return "Hello Maven";
}
public static void main( String[] args )
{
System.out.println( new Hello().sayHello() );
}
}
2.2 测试代码
也是随便写一个,不过用了Junit,需要先在pom.xml中声明依赖junit。
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.7</version>
<scope>test</scope>
</dependency>
注:<scope>
默认值是compile,表示对主代码和测试代码都有用。写为<scope>test</scope>
表示只用于这个插件使用范围是test下的java文件。主代码下import JUnit会在编译时出错。
测试代码,例如
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
/**
* Unit test for simple App.
*/
public class HelloTest
extends TestCase
{
/**
* Create the test case
*
* @param testName name of the test case
*/
public HelloTest( String testName )
{
super( testName );
}
/**
* @return the suite of tests being tested
*/
public static Test suite()
{
return new TestSuite( HelloTest.class );
}
/**
* Rigorous Test :-)
*/
public void testApp()
{
Hello hello = new Hello();
String result = hello.sayHello();
assertEquals( "Hello Maven", result );
}
}
三、编译
3.1 命令行方式
3.1.1 主代码
在项目根目录下运行
mvn clean compile
clean表示清理输出目录target/,compile表示编译项目主代码。默认情况下,maven构建都所有输出都在target/目录下。
顺序为:
- 执行clean。删除输出目录target下的内容;
- 执行resources。目前没有定义项目资源。
- 执行compile。将项目主代码编译到输出目录target/classes目录
这样,在maven.hello\target\classes\项目名\包名下就出现了Hello.class文件
3.1.2 测试代码
类似的,运行mvn clean test
3.2 Eclipse方式
如下图所示,maven给出了几个常用的选择,例如maven clean等。如果不在这几个右键菜单项的命令,可以:
- 项目上右键,选择maven build
- 输入要执行的maven命令,例如命令行中我们输入mvn clean compile,那ide中就是输入clean compile。
- 测试代码则为clean test。
注意到,这里有两个maven build。如果输入过一遍命令,在第一个中可以选择以前输入过的,不需要再输入一遍。
最终效果:
[INFO] Scanning for projects…
[INFO]
[INFO] --------------------< com.learning.lyl:maven.hello >--------------------
[INFO] Building maven.hello 0.0.1-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] — maven-clean-plugin:2.5:clean (default-clean) @ maven.hello —
[INFO] Deleting G:\mission\JavaLearning\maven.hello\target
[INFO]
[INFO] — maven-resources-plugin:2.6:resources (default-resources) @ maven.hello —
[INFO] Using ‘UTF-8’ encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory G:\mission\JavaLearning\maven.hello\src\main\resources
[INFO]
[INFO] — maven-compiler-plugin:3.1:compile (default-compile) @ maven.hello —
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to G:\mission\JavaLearning\maven.hello\target\classes
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.443 s
[INFO] Finished at: 2019-09-15T16:40:39+08:00
[INFO] ------------------------------------------------------------------------
3.3 常见Error
一个常见error是
[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] 不再支持源选项 5。请使用 6 或更高版本。
[ERROR] 不再支持目标选项 1.5。请使用 1.6 或更高版本。
这是因为maven默认编译的版本是java1.3。可以在<properties>
标签中配置java的版本和maven编译版本(properties在根标签project下一级),取值等于你用的java版本。具体内容如下所示:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
<java.version>1.8</java.version>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
或者在build
下配置也一样(同样在project下一级)。具体内容如下所示:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
四、打包
命令行输入
mvn clean package
或是eclipse的maven build中输入clean package
结果如下:
[INFO] Building jar: G:\mission\JavaLearning\maven.hello\target\maven.hello-0.0.1-SNAPSHOT.jar