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"

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章