项目构建工具Maven:(1)Maven简介及环境配置

作者:陆金龙    发表时间:2017-01-13 18:53   


 目录:

0.简介

1.准备maven环境

2.创建maven项目

3.编译和运行项目

4.安装/部署

5.Eclipse集成Maven

6.Eclipse中运行和调试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)。

基本配置如下供参考:

<localRepository>${user.home}/.m2/repository</localRepository>
  <interactiveMode>true</interactiveMode>
  <offline>false</offline> 
   <!-- 如果Maven使用${user.home}/.m2/plugin-registry.xml来管理plugin的版本,就设置为true,默认为false -->
<usePluginRegistry>false</usePluginRegistry>
  <pluginGroups>
      <pluginGroup>org.mortbay.jetty</pluginGroup>
 </pluginGroups>

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中节点下添加

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <version>2.4.1</version>
            <configuration>
                <encoding>${project.build.sourceEncoding}</encoding>
            </configuration>
        </plugin>
    </plugins>
</build>

继续报错:

 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的子节点。