项目构建工具Maven:(1)Maven简介及环境配置
目录:
0.简介
maven(英文本意为专家、内行)是跨平台的项目管理工具,用于规范整个组织的构建系统。此外,还有依赖管理,自动生成项目站点的特性。
maven命令:
clean 清理
compile 编译
test 单元测试
site javadoc 报告/生成帮助文档
package 打包(只是生成jar包到target下)
install 安装(生成jar包到target下,并且会安装到本地仓库供其他项目使用)
deploy 部署到远程仓库
0.1自动构建 高度自动化 全流程一步构建;
0.2依赖管理 不用导java包,通过配置xml文件实现依赖管理;
0.3 项目管理 项目信息 开发人员信息 开发者信息 文档自动生成。
IDE eclipse/myeclipse 开发集成工具
Ant是专业型的,必须写相应的脚本文件,灵活,但是上手难。
Maven是傻瓜型的,上手容易,并且更智能。拥有约定,能使用默认规则。有生命周期。
核心文件 pom.xml,核心的配置20来行。
1.准备maven环境
1.1 下载maven的压缩包
从http://maven.apache.org/download.cgi,下载apache-maven-3.3.9-bin.zip文件。
解压到目录C:\Program Files\Maven\下,注意目录路径不要含空格,不要有中文。
配置MAVEN_HOME为C:\Program Files\Maven\apache-maven-3.3.9
配置path,添加%MAVEN_HOME%\bin;
检查安装是否成功:cmd中执行 mvn -v,查看到版本信息即表示成功。
如果Java的环境没有配置,则
配置JAVA_HOME为C:\Program Files\Java\jdk1.8.0_92
配置path,添加%JAVA_HOME%\bin;
1.2 配置settings.xml
在apache-maven-3.3.9下的conf目录下找到settings.xml,拷贝到用户目录下的.m2中(C:\Users\kl\.m2)。
基本配置如下供参考:
2.创建maven项目
关于创建项目的结论:使用create始终失败,使用generate则成功,因此弃用create。
在cmd中generate执行命令:
G:\KLProject\workspace> mvn archetype:generate -DgroupId=com.kl -DartifactId=test
注:这是交互式执行模式,在以下蓝色文字行会停下,等待用户输入,只要按回车继续即可。
Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): 788:
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:
[INFO] Using property: groupId = com.kl
[INFO] Using property: artifactId = test
Define value for property 'version': 1.0-SNAPSHOT: :
[INFO] Using property: package = com.kl
Confirm properties configuration:
groupId: com.kl
artifactId: test
version: 1.0-SNAPSHOT
package: com.kl
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.kl
[INFO] Parameter: packageName, Value: com.kl
[INFO] Parameter: package, Value: com.kl
[INFO] Parameter: artifactId, Value: test
[INFO] Parameter: basedir, Value: G:\KLProject\workspace
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] project created from Old (1.x) Archetype in dir: G:\KLProject\workspace\test
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 06:31 min
[INFO] Finished at: 2016-06-04T01:28:17 08:00
[INFO] Final Memory: 15M/129M
[INFO] ------------------------------------------------------------------------
3.编译和运行项目
3.0 清理项目
执行 mvn clean
将项目下的target目录清除。
3.1 编译项目
执行 mvn clean compile,执行成功,如下:
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to G:\KLProject\workspace\test\target\classes
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 01:24 min
[INFO] Finished at: 2016-06-04T00:29:04 08:00
[INFO] Final Memory: 12M/125M
[INFO] ------------------------------------------------------------------------
3.2 单元测试
执行 mvn clean test ,执行成功。
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running com.kl.AppTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.012 sec
Results :
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 24.410 s
[INFO] Finished at: 2016-06-04T00:32:30 08:00
[INFO] Final Memory: 14M/126M
[INFO] ------------------------------------------------------------------------
3.3 项目打包
执行mvn clean package
运行完后,会在target目录下生成jar包:test-1.0-SNAPSHOT.jar。
3.4 项目运行
该项目中的App.java中有main方法,可以直接运行,常规方式下,我们如果想直接运行class文件,得敲一段很长的命令,maven中不必这么复杂,先用记事本打开项目根目录下的pom.xml文件,在</project>之前增加下面这节内容:
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
<executions>
<execution>
<goals>
<goal>exec</goal>
</goals>
</execution>
</executions>
<configuration>
<executable>java</executable>
<arguments>
<argument>-classpath</argument>
<classpath>
</classpath>
<argument>com.kl.App</argument>
</arguments>
</configuration>
</plugin>
</plugins>
</build>
执行mvn exec:exec
输出以下内容:
Hello World!
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 18.261 s
[INFO] Finished at: 2016-06-04T00:43:21 08:00
[INFO] Final Memory: 9M/156M
[INFO] ------------------------------------------------------------------------
4.安装/部署
4.1 Web项目部署
如果是web项目,使用命令mvn clean jboss-as:deploy
就能自动将web项目部署到jboss中(前提是jboss web server已经成功启动),因为刚才我们创建的是一个最基本的maven项目,并非web项目,所以执行这条命令,应该会失败,后面会讲如何在eclipse中用插件部署web项目,这里可以先跳过。
4.2 项目安装
如果我们的项目是一个类库,只是封装一些方法供其它项目引用,对于这种项目,我们可以用 mvn clean install 把生成的jar包,安装到“本地仓库”中,这样本机其它项目需要使用该jar包时,只要在pom里配置依赖项即可,不用把jar包复制到当前项目中。执行成功,输出结果如下。
到此,整个流程完成。关键参考博文:http://www.cnblogs.com/yjmyzz/p/3495762.html
[INFO] Installing G:\KLProject\workspace\test\target\test.jar to C:\Users\kl\.m2\repository\com\kl\test\1.0-SNAPSHOT\test-1.0-SNAPSHOT.jar
[INFO] Installing G:\KLProject\workspace\test\pom.xml to C:\Users\kl\.m2\repository\com\kl\test\1.0-SNAPSHOT\test-1.0-SNAPSHOT.pom
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 22.248 s
[INFO] Finished at: 2016-06-04T00:56:06 08:00
[INFO] Final Memory: 18M/162M
[INFO] ------------------------------------------------------------------------
附:以下为之前的错误记录
执行 mvn install
maven-resources-plugin:2.6:resources (default-resources)
Error injecting: org.apache.maven.plugin.resources.ResourcesMojo
java.lang.NoClassDefFoundError: org/apache/maven/shared/filtering/MavenFilteringException
1.出现此错误时一定是download resource插件时,maven私服上没有这个版本的插件.现在存在的resource插件版本为2.4.1可以改成这个版本试试.
在test1项目跟目录下的pom .xml中
继续报错:
Error injecting: org.apache.maven.plugin.resources.ResourcesMojo
java.lang.NoClassDefFoundError: org/apache/maven/shared/filtering/MavenFilteringException
2.我出现的原因是因为子项目没有引用服务项目的plugin插件导致maven会默认自动下载resource插件 而新版本的resource插件不存在.所以报了如上的错误
解决方案把plugin插件添加到子项目中然后指定插件版本号即可.
5.Eclipse集成Maven
5.1修改eclipse中使用的maven版本
eclipse自带了maven,如果想使用最新的3.3.9,可以在eclipse -> window -> perferences -> Maven -> Installations 里参考下图设置一下
5.2 安装Red Hat JBoss Developer Studio(可选)
eclipse -> help -> Eclipse Marketplace 搜索jboss,找到Red Hat JBoss Developer Studio,安装即可。
最新版本9.1.0.GA,需要使用java1.8。
5.3 使用Red Hat JBoss Developer Studio创建Maven项目
创建一个web的maven示例项目。
File -> New -> 中没有Maven Project,则点击Other...,在弹出窗体中选择,如下:
去掉Use default Workspace location 前面的勾,选择自己的workspace目录。
File -> New -> Maven Project -> Next ,在接下来的窗口中会看到一大堆的项目模板,选择需要的模板创建项目。
6.Eclipse中运行和调试Maven项目
Eclipse安装了Maven插件后,在项目的pom.xml上右键能看到如下:
而我以为:Maven build 与 mvn compile 是等价的,于是我再点击"Maven build..."之后,“Goals”是空的,如:
于是就报了这样的错误:
[ERROR] No goals have been specified for this build. You must specify a valid lifecycle phase or a goal in the format:or:[:]:. Available lifecycle phases are: validate, initialize, generate-sources, process-sources, generate-resources, process-resources, compile, process-classes, generate-test-sources, process-test-sources, generate-test-resources, process-test-resources, test-compile, process-test-classes, test, prepare-package, package, pre-integration-test, integration-test, post-integration-test, verify, install, deploy, pre-site, site, post-site, site-deploy, pre-clean, clean, post-clean. -> [Help 1]
解决
解决方法至少有两种:
再点击"Maven build..."之后,输入你要执行的“Goals”,如compile,clean,test等等;
pom.xml中配置默认的Goal,如:
<build>
<defaultGoal>clean</defaultGoal>
</build>
作为project的子节点。