maven2

(0)
maven安装:
首先当然去Apache网站下载Maven2了。下载地址: http://maven.apache.org/download.html
我下载的版本是apache-maven-2.2.1-bin.zip.
然后我把apache-maven-2.2.1- bin.zip.解压到D:\apache-maven-2.2.1
配置环境变量(同其它软件配置,如ant,svn):
1)MAVEN_HOME:D:\maven-2.0.4
2)在 Path 中加入%MAVEN_HOME%\bin
3)在命令行输入 Mvn -version
显示
Maven version: 2.2.1 则安装成功。
 
(1)
下面说一些Maven1.x和Maven2.x的不同:
Maven2 把配置文件压缩成了pom.xml和settings.xml 两个文件,简洁了不少。POM是Maven的核心对象模型,在Maven2中POM已由project.xml转移到pom.xml中使用,版本也由3升 级为4。对于项目,一般只需要pom.xml就行了。在Maven2中不需要也不提倡使用maven.xml
生命周期的引入
在Maven2中有了明确的生命周期概念,而且都提供与之对应的命令,使得项目构建 更加清晰明了。主要的生命周期阶段.

(2)
基本设置,打开maven根目录\conf\settings.xml
1. 改变<localRepository>E:/app/m2/repository</localRepository> .
目 的:改变本地的数据仓库目录(存放从远程下载的jar包),如果不改变也可以,如不改变,缺省目录为:C:\Documents and Settings\主机名\.m2\repository
(3)
体验maven
创建一个java project.
在命令行中,进入你常 用的项目文件夹,输入:
mvn archetype:create -DgroupId=com.mycompany.app -DartifactId=my-app
如果网络配置正确,maven就会下载需要的文件,执行任务,最终显示“BUILD SUCCESSFUL”,并生成my-app目录到你当前命令行所在的目录.
让我们看一下mvn对项目目录的组织:
My-app
├─pom.xml
└─src          (同目录下,可以有target目录)
├─main         (同目录下,可以有test目录)
│ └─java
│ └─com
│ └─mycompany
│ └─app
│ └─App.java
└─test        
└─java
└─com
└─mycompany
└─app
└─AppTest.java
可以看出,代码和测试代码 分别放在main及test文件夹下。
说明:
您会发现Maven在my-app目录下创建了一个pom.xml文件。这是项目的最基本部 分。pom.xml文件包含了一组指令,这些指令告诉Maven如何构建项目和包含哪些其它的特殊指令(POM是“项目对象模型”的缩写)。在默认的情况 下,Maven包含了JUnit的依赖以此来鼓励单元测试。如下:
<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.mycompany.app</groupId>
  <artifactId>my-app</artifactId>     
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>     
  <name>my-app</name>                 
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>
pom.xml元素分析:
poject 这是pom.xml的顶级元素。
modelVersion 这是元素指出了这个POM使用的是那个版本的对象模型。这个模型的版本自身么是经常改变的,但这种改变是为了使模型更加的稳定。
<groupId>: 一个项目群的ID,一个项目群可以包含多个项目
<artifactId>:一个项目的ID,是每个项目的唯一ID.
<version>: 描述了项目当前的版本.
此三个元素,组成了一个项目唯一的标记.

name 这个元素指出这个工程显示的名称。这个常用于Maven产生的文档中。
url 这个员算指出在哪里能发现工程的站点。这个常用于Maven产生的文档中。
desription 这个元素提供了这个工程基本的描述。这也常用于Maven产生的文档中。
(4)
maven命令
说明:
1)
当执行mvn的命令时,maven会从本地的私服(私人服务器)上找相关的 jar,若找不到,则到网上下载相应的jar且放到私服上。以后执行命令时,会发现执行时间会很快,因为maven直接从私服上获取jar.
2)
执 行关于项目的各命令时,要到项目的根目录下执行如下的命令,否则出错。提示找不到项目的pom.xml.
3)
执行以下各命令后,会在 src的同级目录下,生成一个target的目录,来存放各种结果。
在命令行下输入mvn -h , 显示mvn帮助,其中usage: mvn [options] [<goal(s)>] [<phase(s)>]表明了mvn命令的构成。
1.
Options:可选的参数。比如前面提到的-version , -h等。
2.
Goal(s): 表示maven构建的“目标”。
比如前面的mvn archetype:create -DgroupId=com.mycompany.app -DartifactId=my-app
其中archetype:create表示 archetype插件下的create目标。这里,插件是为了某种目的构建的目标的集合,maven通过插件扩展其功能。
还可以为目标传递一 些参数,比如上面的“-DgroupId=com.mycompany.app -DartifactId=my-app”。
3.
Phase(s): 阶段。表示maven构建生命周期 中的一个步骤。使用相位命令时,maven会执行生命周期中该阶段之前的所有命令,使项目处于指定的“状态”。
比 如在刚才创建的项目路径下输入mvn compile,会创建target文件夹,并编译class,使项目处于“已编译”状态。
maven定 义的生命周期中主要的相位如下:
validate: 验证项目是否正确以及相关信息是否可用。
compile: 编译。会生成存放到/target/classes目录.
mvn compile :编译源代码
mvn test-compile :编译测试代码

test: 通过junit进行单元测试。 会生成存放到/target/test-classes目录及执行verify命令.
package: 根据事先指定的格式(比如jar),进行打包。 会生成存放到/target目录下.
         执行此命令,会自动先执行compile,test等命令.
integration-test: 部署到运行环境中,准备进行集成测试。
verify: 对包进行有效性性和质量检查。会生成存放到/target/surefire-reports(存放单元测试报告)目录.
install: 安装到本地代码库: 默认会复制到本地的jar存放的地方。
deploy: 在集成或发布环境,将包发布到远程代码库。
在“默认”的生 命周期之外,还有两个“阶段”:
clean: 清除以前的构建物。 会删除整个target目录.
site: 生成项目文档。 会生成存放到/target/site目录.
-skipping的用法:
只测试而不编译,也不测试编译:mvn test -skipping compile -skipping test-compile (这里要特别注意 -skipping 的灵活运用,当然也可以用于其他组合命令)
generate-sources,产生应用需要的任何额外的源代码,如xdoclet。
mvn eclipse:eclipse:
此命令用于生成Eclipse项目文 件.classpath,.project,使项目可以直接由eclipse的import-->从现成的项目中导入.导入其它IDE的格式也一 样:mvn IDE名:IDE名.
出现的问题:
当建立一个工程后,执行 mvn eclipse:eclipse ,建立一个maven的工程,用eclipse打开后,发现报如下错误:Unbound classpath variable: 'M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar' in project my-webapp   ,这是因为在Eclipse 没有配置 M2_REPO 变量,配置步骤:window >> preferences >> Java >> Build Path >> Classpath Variables
新建一个 M2_REPO 的变量,变量值指向你系统的Maven2的数据仓库位置。
 
组合命令:
可以通过对目标及相位的组合使得一个命令完成多个功能,比如:
mvn clean dependency:copy-dependencies package
相当于按顺序执行
mvn clean
mvn dependency:copy-dependencies
mvn package
(5)
创建一个web project.
接下来我们看看稍微复杂点的地方,我们知道手动开始一个Java web项目比手动开始一个简单的Java项目更耗时,然而Maven的使用则能化难为易。下面的例子(实际上是一行命令)展现了项目结构的构造。
mvn archetype:create -DgroupId=com.web -DartifactId=webProject -DarchetypeArtifactId=maven-archetype-webapp
生成的结果结构如下所示:
webProject
----src
----main
----resources
----webapp
----WEB-INF
pom.xml(存 在于src的同级目录,即根目录中)内容:
<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.web</groupId>
  <artifactId>webProject</artifactId>
  <packaging>war</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>webProject Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
  <build>
    <finalName>webProject</finalName>
  </build>
</project>
可 见,现在默认的打包方式是war. 最后的<build>标签,用于设置war包的名称。

(6)
下面总结一下如何使用Maven2创建典型的三类项目:
普通的Java项目,如基础包等:
   mvn archetype:create   -DgroupId=com.yourcompany  -DartifactId=myproject  -DarchetypeArtifactId=maven-archetype-quickstart
普通的Web项目,如一个Web项目:
    mvn archetype:create  -DgroupId=com.yourcompany -DartifactId=myproject  -DarchetypeArtifactId=maven-archetype-webapp
Appfuse 中的Struts 2.0项目:
    mvn archetype:create -DarchetypeGroupId=org.appfuse -DarchetypeArtifactId=appfuse-basic-struts -DremoteRepositories=http://static.appfuse.org/repository -DarchetypeVersion=2.0-m4-SNAPSHOT -DgroupId=com.mycompany -DartifactId=myproject
(7)
依赖管理
为了给项目添加一个依赖项,必须将此依赖项添加到pom.xml文件中。下次运行Maven的时候,它将从 Ibiblio存储库中得到这个依赖项,并且将此依赖项添加到项目构建路径中。
如:
在Maven中使用依赖是简单的。让我们看看往上述 pom.xml文件中添加一个依赖项的情况。我们虽然已经使用了JUnit,但让我们将功能强大的Quartz库添加到项目中。Quartz是一款用纯 Java编写的关于时间安排的开源项目,它是您时间安排需求方面的很好的选择。
<dependency>
<groupId>quartz</groupId>
<artifactId>quartz</artifactId>
<version>1.5.1</version>
<scope>compile</scope>
</dependency>
我 们仅仅只需添加<dependencies>这个元素,Maven就能下载Quartz并将其作为项目中的一个依赖项。不用担心Quartz 的依赖项,一个Maven的存储库将包含依赖项自身依赖的资源信息,当Maven下载Quartz的时候,它自身的依赖资源也同样会被下载。为了验证版本 为1.5.1的Quartz存在于Ibiblio库中,我们可以浏览Maven存储库。注意到scope参数的使用,它告诉了Maven依赖项在何种阶段 是所需的。在使用JUnit的情况下,我们设置scope参数的值为test来告诉Maven这个依赖项只是在测试阶段所需的,而不是运行时所需的资源。 以下是scope参数值的说明:
--compile,缺省值,适用于所有阶段,会随着项目一起发布。
--provided,类似 compile,期望JDK、容器或使用者会提供这个依赖。如servlet.jar。
--runtime,只在运行时使用,如JDBC驱动, 适用运行和测试阶段。
--test,只在测试时使用,用于编译和运行测试代码。不会随项目发布。
--system,类似 provided,需要显式提供包含依赖的jar,Maven不会在Repository中查找它。
依赖下载后,存在在本地jar库的规则是根据pom.xml中<dependency>的定义,如:
<dependency>
<groupId>quartz</groupId>
<artifactId>quartz</artifactId>
<version>1.5.1</version>
<scope>compile</scope>
</dependency>
dependency 节点中groupId对应路径中第一层目录,artifactId对应第二层,version对应第三层.
/jar库根目录 /quartz/quartz/1.5.1/
(8)
8.1
设置maven的编译参数
如上例中的my-app,添加build标签后的内容如下:
<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.mycompany.app</groupId>
  <artifactId>my-app</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>my-app</name>
  <url>http://maven.apache.org</url>
<build> <!-- 项目的构建信息 -->
  <sourceDirectory>src\main</sourceDirectory>
  <testSourceDirectory>src\test</testSourceDirectory>
  <outputDirectory>target\jasonClasses</outputDirectory>
  <testOutputDirectory>target\jasonTest-classes</testOutputDirectory>
  <directory>jasonJars</directory> <!-- 构建后生成文件(jar,site等)所在位置 -->
  <finalName>jasonJAVAProject</finalName>

</build>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>
这样,在执行mvn package时,则maven会:
将 源码目录(src\main)中的东西编译到target\jasonClasses目录下;
将源码目录(src\test)中的东西编译到 target\jasonTest-classes目录下;
将最后jar打包文件放于根目录下的jasonJars目录下,且名称 为"jasonJAVAProject".
8.2
对于web项目,可以设置资源文件的相关参数:
<build>
  <resources><!-- 存放资源文件。这里的文件不需要编译,在部署打包时,直接复制这里的文件 -->
  <resource>
    <directory>src/resources</directory>
    <!--例外的文件类型。如果这里存放有.java文件,则仍然需要编译。  -->
    <excludes>
      <exclude>**/*.java</exclude>
    </excludes>
  </resource>
 </resources>

</build>
这样, 可以设置在打包war时,要加载哪些资源文件.

(9)
如何处理那些麻烦的Sun的jar包和那些需要但却不能在远程存储库中找到的jar包了?我们必须先下载这些jar包, 再使用Maven来手动将这些jar包安装到本地的存储库中。
如何把dwr.jar包上传到本地数据仓库的例子:
1.下载dwr.jar 包到本地,我把它放到了 C:/ (C盘根目录)
2.进入“命令行提示符”,进入到C:/,然后执行:
 mvn install:install-file -Dfile=dwr.jar -DgroupId=dwr.mocha -DartifactId=dwrDart -Dversion=1.0 -Dpackaging=jar
这样就把dwr传到了本地仓库中,上 传到仓库中的jar包名为dwrDart-1.0.jar,目录结构为dwr/mocha/dwrDart/1.0/dwrDart-1.0.jar.
 
(10)eclipse中maven插件的使用
1.直接在Eclipse 中安装插件,操作步骤
    Open Eclipse, Help -> Install New Software ... -> Add
    Name: Maven2
    Location: http://m2eclipse.sonatype.org/sites/m2e
2. 修改Eclipse中关于Maven的配置:  
Window -> Preferences 在左边的树中查找到 Maven > Installations ,修改 "User Settings",查询到Maven安装目录下conf/settings.xml文件即可。
若不用这种方式,也可以用以下两种方式:
要让eclipse知道Maven 2的repository(仓库)的路径。
a.
因此要设置一个M2_REPO的变量为 classpath。可以使用命令行的方式来设置:
mvn -Declipse.workspace=<path-to-eclipse-workspace> eclipse:add-maven-repo
b.
还可以在eclipse中定义一个新的classpath变量通过在eclipse的 菜单上选择Window> Preferences. 选择Java > Build Path > Classpath Variables page.
3.
创建导入maven项目:
  a先在命令行模式下,用mvn去创建一个java/web/ssh项目;
  b再用mvn eclipse:eclipse;
  c最后在eclipse中import--从已存在的项目导入,将项目导入到eclipse中;
  d工程导入后,其左上角并没有标记。右键选择项目--maven2--enable dependencies management.当添加依赖管理后,会在其左上角出现一个“M”。
   e当你在eclipse中的pom.xml中添加新的<denpency>,保存后,eclipse会自动下载。 下载完后,可以在项目中的左栏的(project explorer)maven dependencies中看到。若删除此依赖,则会同时从maven dependencies删除。
   f,在eclipse中的maven工程,每创建一个目录后,须在java build path--source--add folder,将其显示出来;若要调整目录顺序,要切换到java build path--source--order and export中,进行调整.
附加说明:
java build path-->source-->add Folder界面:
此界面用于添加一个文件夹到java项目中。也可以用于隐藏,显示文件于eclipse中。
当选中时,即可到 eclipse中看到,否则只能在文件系统中找到,在eclipse中看不到。
java build path-->project界面:
用于导入另一项目,来 作为当前项目的依赖类库。
4.
安装maven无法在线下载的依赖包到本地仓库,实例如下:
若出错信息:
10-4-18 上午11时22分27秒: Missing artifact javax.transaction:jta:jar:1.0.1B:compile
其上格式 是:DgroupId:DartifactId:Dpackaging:Dversion
故以下添加时,相应的信息设置如下:
1)
mvn install:install-file -DgroupId=javax.transaction -DartifactId=jta -Dversion=1.0.1B -
Dpackaging=jar -Dfile=E:\workspaces\appfuse\myapp\lib\hibernate-3.1.3\lib\jta.jar
则会 在本地库里创建:-DgroupId路径/-DartifactId/-Dversion/.即:
E:\apache-maven-2.2.1\jarFromNet\javax\transaction\jta\1.0.1B
2)
然 后再在eclipse中点击update denpendencies即可.
3)
另外说明:若在eclipse中run as--mvn install,也就是调用了以上的安装命令,将当前项目打包后,放到本地的仓库中:
在命令行执行mvn install,如:
当执行maven命令时,会在console中显示执行的结果。[INFO] Installing E:\apache-maven-2.2.1\workspaceAddMyself\jasonMaven\target\jasonMaven.war to
E:\apache-maven-2.2.1\jarFromNet\com\webproject\jasonMaven\1.0-SNAPSHOT\jasonMaven-1.0-SNAPSHOT.war
即 将war包上传到本地的资源库中。
5。
可用项目骨架有:
* maven-archetype-archetype
* maven-archetype-j2ee-simple
* maven-archetype-mojo
* maven-archetype-portlet
* maven-archetype-profiles (currently under development)
* maven-archetype-quickstart
* maven-archetype-simple (currently under development)
* maven-archetype-site
* maven-archetype-site-simple, and
* maven-archetype-webapp
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值