大家可能经常使用 eclipse 写 java 项目,那么怎么检验项目在脱离 eclipse 环境时依旧能成功运行呢?今天我想要介绍的就是使用 Maven 构建项目,将一步一步的带领大家进行 java 项目的构建。
概要
本文为系列文章第一篇,主要介绍了 Maven 的安装配置,命令的简单使用,pom.xml 的简单理解,jar包的运行,以及为 jar 包指定主类的问题,都是基础方面的使用。
安装配置
下载
我是Win10系统,下载了 apache-maven-3.5.3-bin.zip
,解压会得到 apache-maven-3.5.3
文件夹。
配置
我将其移动到了 C:\Program Files\
下,接着需配置环境变量 。
添加位置: 控制面板->系统和安全->系统->高级系统设置->环境变量->系统变量->Path
,在其中添加一项 C:\Program Files\apache-maven-3.5.3\bin
,保存设置。
检验
在命令行中输入 mvn --version
,会看到打印的版本信息。
初始构建
可参考: Maven Documentation -> Maven in 5 Minutes
常用命令
mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
//快速构建maven项目,分别指定了groupId, artifactId, 构建类型, 并关闭交互模式。
//简化起见,后四个参数可省略,构建时会采用交互模式,提示用户输入相关信息。
mvn compile //项目编译
mvn test //进行测试文件的测试
mvn package //打包,生成可运行jar包,其会同时执行 compile 与 test 命令。
mvn clean //打包后会生成 target 文件夹,该命令删除 target 文件夹。
初始项目
选择一个位置,在命令行中执行命令 mvn archetype:generate
,比如我选择在桌面。执行过程中,前两次暂停可直接回车跳过,第三次即开始提示输入 groupId
、artifactId
等,我的输入如下,后面的则直接回车跳过即可。
Define value for property 'groupId': com.mycompany.app
Define value for property 'artifactId': my-app
Define value for property 'version' 1.0-SNAPSHOT: :
Define value for property 'package' com.mycompany.app: :
提示完成之后,会在桌面生成 my-app
文件夹,其采用默认的项目目录结构,如下:
my-app
|-- pom.xml
`-- src
|-- main
| `-- java
| `-- com
| `-- mycompany
| `-- app
| `-- App.java
`-- test
`-- java
`-- com
`-- mycompany
`-- app
`-- AppTest.java
pom.xml
即为配置文件,想对build进行设置,即需更改此文件。其所在的目录称为根目录。你可以在根目录下尝试 mvn compile
、mvn test
、mvn package
、mvn clean
等操作,看看对新生成的 target
目录分别有什么影响。
pom 文件
生成的pom文件主要如下,可能会有所差别,但是标签大致都差不多,需要注意的是标签的结构,哪个在哪个里边,以后修改的时候要找对位置。
可参考文档:
Maven doc:Introduction to the POM
Maven doc:Getting Started Guide
<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.0</modelVersion>
<groupId>com.mycompany.app</groupId>
<artifactId>my-app</artifactId>
<version>1.0-SNAPSHOT</version>
<name>my-app</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<plugin>
...
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
jar 包运行
在成功执行打包操作之后,你会发现 target
目录下生成了可执行的 jar 包,那么怎么运行呢?
不含主类的 jar 包运行
目前项目即为这种情况,并没指定 jar 包的主类,就是第一个要执行的类。此时需将 jar 包作为环境依赖,先
cd
进入target
目录,执行命令如下:java -cp my-app-1.0-SNAPSHOT.jar com.mycompany.app.App
控制台会打印
Hello World!
,即意味着你的 jar 包生成成功,本次项目构建成功。注意:最后一个参数即为你要执行的类以及路径,不能使用类名的全称
App.java
。含主类的 jar 包运行
直接执行 jar 包即可,我们在后面会介绍如何设置主类。
java -jar my-app-1.0-SNAPSHOT.jar
添加主类
如何为 jar 文件设置主类呢?在 pom.xml
相应标签下进行如下配置:
<!-- add mainClass -->
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>com.mycompany.app.App</mainClass> <!-- App.java 即为主类名-->
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
成功生成 jar 包之后,照上边介绍的运行即可看到输出 Hello World!
。
java -jar my-app-1.0-SNAPSHOT.jar
总结
本文主要介绍了如何使用 maven 进行简单的项目构建,较为基础,也往往不能满足项目的基本需求。下一篇就将要针对常见的问题进行解决,比如尝试解决了项目目录不是 Maven 默认目录的问题 ,编码不可映射问题,以及使用外部 jar 的问题。