maven构建项目

Maven是款对项目进行编译、发布管理工具,尤其适用于多个项目的管理。

Maven的安装

下载Maven压缩文件,解压缩后,在环境变量Path中配置Maven bin的目录路径。

创建例子

1.用如下命名在当前目录下创建名为my-app的项目(命令需写在一行上)

mvn archetype:create -DarchetypeGroupId=org.apache.maven.archetypes -DgroupId=com.mycompany.app -DartifactId=my-app

2.在my-app下可以看到Maven创建的pom.xml文件  

<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>
	<packaging>jar</packaging>
	<version>1.0-SNAPSHOT</version>
	<name>Maven Quick Start Archetype</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>

project: pom.xml的最顶端元素;
modelVersion: Project Object Model(POM)的本版号;
groupId:指定项目的唯一标识;
artifactId:指定创建包(如jar)文件的名称,一般由<artifactId>-<version>组成;
packageing:指定包的类型(jar,war等),默认是jar;
version:指定创建包的本版号;
name:为项目指定的名称,用在项目文档中;
url:用于Maven创建的项目文档的网站地址;
pom.xml的文件定义,查看http://maven.apache.org/xsd/maven-4.0.0.xsd

3.Maven创建的文档结构图如下:  

my-app

|-- pom.xml

`-- src

    |-- main

    |   `-- java

    |       `-- com

    |           `-- mycompany

    |               `-- app

    |                   `-- App.java

    `-- test

        `-- java

            `-- com

                `-- mycompany

                    `-- app

                        `-- AppTest.java


4.mvn compile 命令对该项目进行编译,第一次编译时,maven需要从远程库中下载一些插件和包,缓存在本地目录中(默认C:\Documents and Settings\Administrator\.m2),方便下次编译不用重新下载
mvn test 运行项目下的测试用例,默认情况下满足测试用例命名的java文件都会被测试到:
例如:

**/*Test.java

**/Test.java

 **/*TestCase.java

但下面的测试用例会被排除在外

**/Abstract*Test.java

**/Abstract*TestCase.java


mvn package 命令对项目打包,由packaging指定类型
mvn install 命令将打包的文件安装在本地库中
mvn site 命令创建项目的文档
mvn clean 命令清除项目编译打包文件
mvn eclipse:eclipse 命令为项目创建eclipse的配置文件,如.project,.classpath
maven对项目的编译和发布建立在明确定的编译生命周期中,编译生命周期有三中,default, clean, site
default负责项目的编译和发布;clean负责项目的清理;site负责为项目产生文档;
参考:http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html
一个生命周期由多个片段组成,比如default生命周期有

  • validate - validate the project is correct and all necessary information is available
  • compile - compile the source code of the project
  • test - test the compiled source code using a suitable unit testing framework. These tests should not require the code be packaged or deployed
  • package - take the compiled code and package it in its distributable format, such as a JAR.
  • integration-test - process and deploy the package if necessary into an environment where integration tests can be run
  • verify - run any checks to verify the package is valid and meets quality criteria
  • install - install the package into the local repository, for use as a dependency in other projects locally
  • deploy - done in an integration or release environment, copies the final package to the remote repository for sharing with other developers and projects.

default生命周期按照上面的片段顺序执行;通过packaging,plugin等来设置生命周期。

5.设置插件

当需要自定义编译项目时,可以通过设置插件完成,如:配置JDK5.0编译java代码,插件列表:http://maven.apache.org/plugins/

...
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.0.2</version>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
</plugins>
</build>
...

6.通过设置改变maven的默认的目录结构

<build>
...
<directory>${project.basedir}/target</directory>
<outputDirectory>${project.build.directory}/classes</outputDirectory>
<finalName>${project.artifactId}-${project.version}</finalName>
<testOutputDirectory>${project.build.directory}/test-classes</testOutputDirectory>
<sourceDirectory>${project.basedir}/src/main/java</sourceDirectory>
<!
- TODO: MNG-3731 maven-plugin-tools-api < 2.4.4 expect this to be relative... ->
<scriptSourceDirectory>src/main/scripts</scriptSourceDirectory>
<testSourceDirectory>${project.basedir}/src/test/java</testSourceDirectory>
<resources>
<resource>
<directory>${project.basedir}/src/main/resources</directory>
</resource>
</resources>
<testResources>
<testResource>
<directory>${project.basedir}/src/test/resources</directory>
</testResource>
</testResources>
...
</build>

7.引用外部类

maven通过在库http://repo1.maven.org/maven2/ 中下载包到本地缓存库,通过查看

maven-metadata.xml确定引用包的groupId, artifactId和version,例如:

<metadata>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.1.3</version>
<versioning>
<versions>
<version>1.1.3</version>
<version>1.2.4</version>
<version>1.2.5</version>
<version>1.2.6</version>
<version>1.2.7</version>
<version>1.2.8</version>
<version>1.2.11</version>
<version>1.2.9</version>
<version>1.2.12</version>
</versions>
</versioning>
</metadata>

引用包可以通过scope元素指定使用范围,比如test,compile,runtime。指定test的包文件不会编译到项目的lib中。远程库中找不到的包文件,需手动下载该包,再安装到本地库中,或者发布到自己定义的远程库中,命令如下:

mvn install:install-file -DgroupId=ehcache -DartifactId=ehcache -Dversion=1.5.0 -Dpackaging=jar -Dfile=path\to\file


mvn deploy:deploy-file -DgroupId=javax.activation -DartifactId=activation -Dversion=1.0.2 -Dpackaging=jar -Dfile=/path/to/file -Durl=[url] -DrepositoryId=[id]

8.创建webapp项目 (命名写在一行)

mvn archetype:create -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-webapp -DgroupId=com.mycompany.app -DartifactId=my-webapp

查看pom.xml文件

<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.0http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.mycompany.app</groupId>
	<artifactId>my-webapp</artifactId>
	<packaging>war</packaging>
	<version>1.0-SNAPSHOT</version>
	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>3.8.1</version>
			<scope>test</scope>
		</dependency>
	</dependencies>
	<build>
		<finalName>my-webapp</finalName>
	</build>
</project>

查看文件目录结构

+- pom.xml

+- my-app

| +- pom.xml

| +- src

|   +- main

|     +- java

+- my-webapp

| +- pom.xml

| +- src

|   +- main

|     +- webapp

mvn package 命令将webapp项目打成一个war包,存放在target目录下。

要修改webapp的目录结构,可以通过war插件如下:

<plugins>

   …

  <plugin>

     <artifactId>maven-war-plugin</artifactId>

      <version>2.1-beta-1</version>

 <configuration>

  <webResources>

   <resource>

      <directory>web</directory>

        <excludes>

         <exclude>*/.jar</exclude>

         <exclude>*/.class</exclude>

                  </excludes>

    </resource>

              </webResources>

 </configuration>

    </plugin>

   ...    

</plugins>


11.编译多个项目

创建如下的项目目录:

  

+- pom.xml

+- my-app

| +- pom.xml

| +- src

|   +- main

|     +- java

+- my-webapp

| +- pom.xml

| +- src

|   +- main

|     +- webapp


最上面的pom.xml文件如下

<project&nbsp;xmlns="http://maven.apache.org/POM/4.0.0"

&nbsp;&nbsp;xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

&nbsp;&nbsp;xsi:schemaLocation="http://maven.apache.org/POM/4.0.0

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http://maven.apache.org/xsd/maven-4.0.0.xsd">

&nbsp;&nbsp;<modelVersion>4.0.0</modelVersion>

&nbsp;&nbsp;<groupId>com.mycompany.app</groupId>

&nbsp;&nbsp;<version>1.0-SNAPSHOT</version>

&nbsp;&nbsp;<artifactId>app</artifactId>

&nbsp;&nbsp;<packaging>pom</packaging>

&nbsp;&nbsp;<modules>

&nbsp;&nbsp;&nbsp;&nbsp;<module>my-app</module>

&nbsp;&nbsp;&nbsp;&nbsp;<module>my-webapp</module>

&nbsp;&nbsp;</modules>

</project>

在my-webapp项目中添加my-app的jar引用

  ...

  <dependencies>

    <dependency>

      <groupId>com.mycompany.app</groupId>

      <artifactId>my-app</artifactId>

      <version>1.0-SNAPSHOT</version>

    </dependency>

    ...

  </dependencies>

在my-app 和my-webapp项目中的pom.xml文件中添加

<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">

  <parent>

    <groupId>com.mycompany.app</groupId>

    <artifactId>app</artifactId>

    <version>1.0-SNAPSHOT</version>

  </parent>

  ...

运行命令mvn clean package,将my-app和my-webapp打包,并且在my-webapp包中引用my-appd的jar包。

如果两个项目的文件结构如下:

.

 |-- my-module

 |   `-- pom.xml

 `-- parent

     `-- pom.xml

子项目应该用 <relativePath>元素指定,相对于子项目pom.xml路径

<project>

  <parent>

    <groupId>com.mycompany.app</groupId>

    <artifactId>my-app</artifactId>

    <version>1</version>

    <relativePath>../parent/pom.xml</relativePath>

  </parent>

  <modelVersion>4.0.0</modelVersion>

  <artifactId>my-module</artifactId>

</project>

父项目的pom.xml文件应该为,相对父项目pom.xml路径

<project>

  <modelVersion>4.0.0</modelVersion>

  <groupId>com.mycompany.app</groupId>

  <artifactId>my-app</artifactId>

  <version>1</version>

  <packaging>pom</packaging>

  <modules>

    <module>../my-module</module>

  </modules>

</project>

3.配置远程资源库

远程资源库可以是http服务器,或者文件服务器等,参考文档http://maven.apache.org/guides/introduction/introduction-to-repositories.html
以下创建http服务器的资源库
1)下载安装Apache;
2)修改Apache的默认根目录 如:
DocumentRoot "E:/repository"
同时修改
<Directory "[E:/repository|../repository|\||]">

</Directory>
3)可以自定义目录列表的结构
Options Indexes
#Options Indexes FollowSymLinks
#显示文件大小,修改时间, NameWidth=*指定显示文件长度不受限制
IndexOptions FancyIndexing NameWidth=*
#指定按照修改日期排序(升序)
IndexOrderDefault Ascending Date
5)web服务器创建好后,通过http://localhost访问成功;
4)在pom.xml文件中添加资源库

<project>
...
<repositories>
<repository>
<id>my-internal-site</id>
<url>http://myserver/repo</url>
</repository>
</repositories>
...
</project>

发布到远程资源库

1)建立ftp站点
用ftp工具如:Apache ftpserver建立ftp站点,下面以ftpserver为例进行配置:
a)下载Apache ftpserver后,解压缩;
b) 解压缩后的目录在res\conf下有ftp的站点的配置文件,修改users.properties中的帐号访问的目录地址如: [E:/repository;|../../repository|\||]
c)在命令窗口中指向bin目录:执行ftpd.bat res/conf/ftpd-typical.xml,启动ftp站点服务;
d)通过ftp://localhost:2121访问ftp站点,测试通过;
e)在pom.xml文件中添加
<distributionManagement>
<!
- use the following if you're not using a snapshot version. ->
<repository>
<id>repository</id>
<name>internal-site</name>
<url>ftp://192.168.22.159:2121</url>
</repository>
</distributionManagement>
f)在build标签下添加
...
<extensions>
<extension>
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-ftp</artifactId>
<version>1.0-alpha-6</version>
</extension>
</extensions>
...
g)在conf/setting.xml中,配置server,如:
<serers>

<server>
<id>repository</id>
<username>admin</username>
<password>admin</password>
</server>

</servers>
h)通过mvn deploy:deploy-file -DgroupId=javax.activation -DartifactId=activation
-Dversion=1.0.2 -Dpackaging=jar -Dfile=/path/to/file -Durl=[url] -DrepositoryId=
[id]发布资源(例如:mvn deploy:deploy-file -DgroupId=com.hc360 -DartifactId=mmtlogutils -Dversion=1.0 -Dpackaging=jar -Dfile=D:\workspace\mmtlogutils\target\mmtlogutils.jar -Durl=ftp://localhost:2121/ -DrepositoryId=repository)

安装m2eclipse插件

1)m2eclipse插件更新地址:http://m2eclipse.sonatype.org/update/
2)修改eclipse.ini文件,添加-vm 如:
-showsplash
com.genuitec.myeclipse.blue.product.ide
--launcher.XXMaxPermSize
256m
-vm
"C:\Program Files\Java\jdk1.5.0_02\bin\javaw.exe"

-vmargs
-Xms128m
-Xmx512m
-Duser.language=en
-XX:PermSize=128M
-XX:MaxPermSize=256M
3)创建eclipse的快捷方式,设置目标-vm如:
"C:\Program Files\MyEclipse 6.5M1 Blue\eclipse\eclipse.exe" -vm "C:\Program Files\Java\jdk1.5.0_02\bin\javaw.exe"

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值