`
rainShare
  • 浏览: 102428 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Maven的理解

阅读更多
一个Maven2工程的核心就是这一个pom.xml,它包含了你的工程详细信息,如:版本、配置、依赖、测试、项目成员等等。学习maven2主要就是学习如何配置pom.xml。

一个简单的而完全可操作的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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion> <!--maven2-->
<groupId>ctzj_bss</groupId> <!-- 这个项目所属组的id,一般是项目所在的公司或组织的域名 -->
<artifactId>NRC</artifactId> <!-- 项目的id,和groupId一起组成这个项目的一个唯一id,以用在别的maven2工程中 -->
<packaging>jar</packaging> <!-- 最后这个工程的打包类型,在这里是打成jar包 -->
<version>1.0</version> <!-- 版本号 -->
<name>kenan nrc batch</name> <!-- 项目名, 区别于artifactId-->
<description>insert a nrc in kenan db</description> <!-- 项目描述,会出现在生成的工程站点上 -->
<build> <!-- 项目的构建信息 -->
  <sourceDirectory>src</sourceDirectory>
  <testSourceDirectory>test</testSourceDirectory>
  <outputDirectory>target\classes</outputDirectory>
  <testOutputDirectory>target\test-classes</testOutputDirectory>
  <directory>target</directory> <!-- 构建后生成文件(jar,site等)所在位置 -->
</build>
<dependencies> <!-- 项目的依赖外接包,maven的优势之一 -->
  <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>3.8.1</version>
    <scope>test</scope>
  </dependency>
</dependencies>
<reporting> <!-- 项目报表,有很多插件可供选择 -->
  <outputDirectory>target/site</outputDirectory>
  <plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-javadoc-plugin</artifactId>
    </plugin>
  </plugins>
</reporting>
</project>


在你配置了你的pom文件后,你就可以使用如下命令来运行maven2

mvn compiler:compile 编译你的原文件
mvn jar:jar 打包
mvn site:site 生成项目站点


接下来逐个介绍pom.xml的各个要素

developor,organization and mail lit
build
dependencies
reporting

1.developor,organization and mail list

可以在pom中加入开发人员列表,项目所属组织信息,邮件列表,这些信息会出现在生成的项目站点上

<organization>
  <name>CTZJ BSS</name>
</organization>
<developers>
  <developer>
    <name>Chen Lin</name>
    <organization>ZJHCsoft</organization>
    <email>chenlin@zjhcsoft.com</email>
  </developer>
</developers>
<mailingLists>
  <mailingList>
    <name>${pom.name} Dev List</name>
  </mailingList>
  <mailingList>
    <name>${pom.name} User List</name>
  </mailingList>
</mailingLists>

2. build

配置项目的构建信息,主要有指定目录,包括源代码、测试源代码、输出目录、资源目录等.如果没有特殊需求以上的pom已经足够了

3. dependencies

配置项目要用到的jar包.自认为maven对jar包的管理是它的一个重要特色.下面是一个jar包的配置:

<dependency>
  <groupId>concurrent</groupId>
  <artifactId>concurrent</artifactId>
  <version>1.3.4</version>
  <scope>compile</scope>
</dependency>

groupId: 没有特定的含义,一般来自同一组织的jar包会有相同的groupId值
artifactId: 这个jar的id,一般是这个jar包的名称
version: jar包的版本号,一般情况下,artifactId-version.jar就是这个jar包的文件名
scope: 这个jar所影响的范围,compile指它会在编译源代码时用到.还有test,provide,runtime等值

如果你不知道jar包的groupId和artifactId,可以到http://www.mavenregistry.com/ 进行查询

一旦指定后,当你进行编译时,它就会到你的本地资源库

另,如果你引入本地包,则需要先行将它安装到本地资料库(repository),使用如下命令

mvn install:install-file -DgroupId=%groupId% -DartifactId=%artifactId% -DgeneratePom=true -Dfile=%file% -Dpackaging=jar -Dversion=%version%

4. reporting

通过使用相应的report plug-in可以生成各种各样的report.如javadoc,junit test report,代码检查等

常用的常见有

<plugin>
  <groupId>org.apache.maven.plugins</groupId> <!--java doc -->
  <artifactId>maven-javadoc-plugin</artifactId>
</plugin>
<plugin>
  <groupId>org.apache.maven.plugins</groupId> <!-- 代码检查 -->
  <artifactId>maven-checkstyle-plugin</artifactId>
  <configuration>
    <configLocation>config/sun_checks.xml</configLocation>
  </configuration>
</plugin>
<plugin>
  <groupId>org.codehaus.mojo</groupId> <!-- test 结果报表 -->
  <artifactId>surefire-report-maven-plugin</artifactId>
</plugin>
<plugin>
  <groupId>org.codehaus.mojo</groupId> <!-- 源代码的HTML化 -->
  <artifactId>jxr-maven-plugin</artifactId>
</plugin>

在maven的官方网站有可以找到更多的report plugin


最后一个比较完整的pom.xml看起来像这样:

<?xml version="1.0" encoding="UTF-8"?>
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<name>CutoverModule</name>
<groupId>ctzj_batch</groupId>
<artifactId>eai_cutover</artifactId>
<url>http://134.98.83.137:8081/scarab/issues</url>
<inceptionYear>2006</inceptionYear>
<organization>
  <name>CTZJ BSS</name>
  <url>http://www.zjhcsoft.com</url>
</organization>
<version>1.0</version>
<description>97 cutover batch module:invoke eai-adapter to update the phone number or value of
c4/c5</description>
<developers>
  <developer>
    <name>Chen Lin</name>
    <organization>ZJHCSoft</organization>
    <email>chenlin@zjhcsoft.com</email>
  </developer>
</developers>
<mailingLists>
  <mailingList>
    <name>${pom.name} Dev List</name>
  </mailingList>
</mailingLists>
<build>
  <sourceDirectory>src</sourceDirectory>
  <testSourceDirectory>test</testSourceDirectory>
  <outputDirectory>target\classes</outputDirectory>
  <testOutputDirectory>target\test-classes</testOutputDirectory>
  <directory>target</directory>
  <plugins>
  <plugin>
    <artifactId>maven-clean-plugin</artifactId>
    <version>2.1</version>
  </plugin>
  <plugin>
    <artifactId>maven-resources-plugin</artifactId>
    <version>2.1</version>
  </plugin>
  <plugin>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>2.0</version>
  </plugin>
  <plugin>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.1.2</version>
  </plugin>
  <plugin>
    <artifactId>maven-jar-plugin</artifactId>
    <version>2.0</version>
  </plugin>
  <plugin>
    <artifactId>maven-install-plugin</artifactId>
    <version>2.1</version>
  </plugin>
  </plugins>
</build>
<ciManagement>
  <system>continuum</system>
  <url>http://localhost:8080/continuum/servlet/continuum</url>
</ciManagement>
<scm>
  <connection>scm:local|E:/eclipseworkshop|EAIBatch</connection>
</scm>
<dependencies>
  <dependency>
    <groupId>ctzj_batch</groupId>
    <artifactId>Eaiadapter</artifactId>
    <version>1.0</version>
    <scope>compile</scope>
  </dependency>
  <dependency>
    <groupId>ctzj_batch</groupId>
    <artifactId>ta</artifactId>
    <version>1.0</version>
    <scope>compile</scope>
  </dependency>
  <dependency>
    <groupId>ctzj_batch</groupId>
    <artifactId>grnds-common</artifactId>
    <version>4.1</version>
    <scope>compile</scope>
  </dependency>
  <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>3.8.1</version>
    <scope>test</scope>
  </dependency>
  <dependency>
    <groupId>concurrent</groupId>
    <artifactId>concurrent</artifactId>
    <version>1.3.4</version>
    <scope>compile</scope>
  </dependency>
</dependencies>
<reporting>
  <outputDirectory>target/site</outputDirectory>
  <plugins>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-javadoc-plugin</artifactId>
  </plugin>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-checkstyle-plugin</artifactId>
    <configuration>
        <configLocation>config/sun_checks.xml</configLocation>
    </configuration>
  </plugin>
  <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>surefire-report-maven-plugin</artifactId>
  </plugin>
  <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>jxr-maven-plugin</artifactId>
  </plugin>
  </plugins>
</reporting>
</project>






maven的POM结构
[ 作者: | 来源:| 点击数: <script src="maven的POM结构-教程-源码-下载.files/Click.htm" type="text/javascript"></script> 65 ]
  <!-- 参加开发的人员 -->
  <developers>
    <developer>
<name>Dave Blackett (Jetspeed logos)</name>
<id/>
<email>blackett@black.com</email>
<organization/>
    </developer>
    ......
  </developers>

******项目相关性部分******与一个中央构件资源库一起使用,将消除几个常见的构建问题

  <!---------------------------------------------------- -->
  <!-- 项目相关性部分                                                -->
  <!---------------------------------------------------- -->

  <!--build过程中maven依据之建立classpath,并且maven会到remote repository自动下载这些dependencies ,如type是jar,下载的文件就是<artifactId>-<version>.jar-->
  <dependencies>

    <!-- 项目依赖JAR文件 "activation-1.0.1.jar",文件在Maven repository
   的activation/jars子目录,并且如果资源库中找不到,maven会在自动从maven.repo.remote下载(《maven安装使用》中提到的修改是因为maven的缺省设置远程资源库无法连接上)-->
  <dependency>
   <id>activation</id>
   <version>1.0.1</version>
   <properties>
    <war.bundle.jar>true</war.bundle.jar>
   </properties>
  </dependency>
  </dependencies>


groupId 告诉 Maven 资源库内哪个子目录中包含相关性文件。
artifactId 告诉 Maven 该构件的唯一标识。如果是jar文件,可以理解为去掉后缀和版本号的文件名 。
version 表示相关性的版本号。
jar  (可选的)表示相关性的 JAR 文件。在绝大多数情况下,可以从相关性的 <artifactId> 和 <version> 构造 JAR 文件的名称。
type  (可选的)相关性的类型;如 jar 和分发版等。缺省值是 jar。
url  可选的)相关性项目的 URL,在相关性是在因特网上找到的第三方库时非常有用。
properties dependency还有properties可以设定,具体要参照各自引用的plugin


******项目构建部分******
  <!---------------------------------------------------- -->
  <!-- 项目build和reports部分                                       -->
  <!---------------------------------------------------- -->

  <build>
    <!-- (OPTIONAL) 定义源文件位置. -->
    <sourceDirectory>src/java</sourceDirectory>

    <!-- (OPTIONAL) 定义单元测试源文件位置. -->
    <unitTestSourceDirectory>test/java</unitTestSourceDirectory>

    <!-- (OPTIONAL) 单元测试用例文件模式. -->
    <unitTest>
<!-- 排除测试 -->
       <excludes>
          <exclude>org/apache/jetspeed/services/registry/TestRegistryCategories.java</exclude>
   ......
       </excludes>
       <!-- 包含测试 -->
<includes>
    <include>**/Test*.java</include>
  </includes>
  <!-- 单元测试使用的资源 -->
  <resources>
      <resource>
          <!-- 资源位置,project.xml的相对路径 -->
   <directory>${basedir}/src/java</directory>
   <!-- 排除文件 -->
   <excludes>
    <exclude>**/*.java</exclude>
   </excludes>
   <!-- 包含文件 -->
   <includes>
    <include>org/apache/jetspeed/modules/localization/JetspeedLocalization_*.properties</include>
   </includes>
       </resource>   
       .......
  </resources>
   </unitTest>

   <!-- 项目使用的资源,结构与单元测试使用的资源结构相同 -->
<resources>
     <resource>
......
      </resource>   
      .......
</resources>

  <!-- (OPTIONAL) 使用maven site生成站点的时候被引用,并以指定的顺序排列在导航条内,report指定生成报告的plugin -->
  <reports>
    <report>
<report>maven-tasklist-plugin</report>
<report>maven-changelog-plugin</report>
<report>maven-javadoc-plugin</report>

分享到:
评论
1 楼 weiqiang.yang 2009-09-03  
引用
如果你不知道jar包的groupId和artifactId,可以到http://www.mavenregistry.com/ 进行查询

地址应该是这个
http://mvnrepository.com

相关推荐

    apache-maven-3.3.9安装包

    它是Maven理解项目并执行构建任务的基础。 2. **依赖管理**: Maven 自动处理项目之间的依赖关系,通过在POM中声明依赖,Maven会自动下载并管理这些依赖库。 3. **生命周期 (LifeCycle)**: Maven 提供了一个标准的...

    apache-maven-3.3.1

    POM是一个XML文件,包含了项目的基本信息,如项目名称、版本、依赖关系、构建目标等,它是Maven理解并管理项目的关键。 在Maven中,项目依赖管理是一项核心功能。通过POM,你可以声明项目所需的库,Maven会自动下载...

    3.3.9版本的maven

    在Maven中,每个项目都有一个`pom.xml`文件,它是Maven理解项目配置的基础。 2. **坐标(Coordinates)**: Maven项目的唯一标识,由groupId、artifactId和version三部分组成。例如,`groupId=org.apache.maven....

    apache-maven压缩包

    它是Maven理解项目的基础。 2. **依赖管理**:Maven通过POM来管理项目依赖。只需要在POM中声明所需库的坐标(groupId、artifactId、version),Maven就能自动下载并管理这些依赖,避免了手动管理jar文件的麻烦。 3...

    maven 3.3.9 mac zip

    POM文件帮助Maven理解项目结构和需求。 2. **依赖管理**:Maven通过中央仓库自动下载并管理项目所需的库文件,避免了手动管理JAR文件的繁琐过程。 3. **生命周期(Lifecycle)**:Maven具有预定义的构建生命周期,...

    apache-maven-2.2.1

    POM帮助Maven理解如何构建项目,以及从哪里获取所需的库和插件。 2. **依赖管理**:Maven通过中央仓库自动管理项目的依赖关系。只需在POM中声明所需库的坐标(groupId, artifactId, version),Maven就能下载并管理...

    Maven2+Eclipse

    此外,POM还包含了构建项目的依赖库、插件配置以及构建规则等关键信息,是Maven理解和控制项目构建流程的核心依据。 #### Maven项目结构:清晰的文件组织方式 Maven项目通常遵循一套固定的目录结构,这种结构不仅...

    apache-maven-3.5.0

    它允许Maven理解项目的结构,并自动执行构建任务,如编译、测试、打包、部署等。 在"apache-maven-3.5.0"这个版本中,可能包含以下组件和特性: 1. **依赖管理**:Maven能够自动下载项目所需的库文件(jar包)并...

    apache-maven-3.3.9.zip

    它是Maven理解并管理项目的基础。 2. **依赖管理**:Maven通过中央仓库管理项目依赖,只需在POM中声明依赖,Maven会自动下载并管理这些依赖,避免了版本冲突的问题。 3. **生命周期**:Maven有一套预定义的构建生命...

    Maven权威指南中文版(完整)

    它是Maven理解项目结构和执行构建任务的基础。 2. **Maven仓库** Maven依赖于中央仓库和其他远程仓库来获取项目所需的各种库。开发者无需手动下载库文件,只需在POM中声明依赖,Maven会自动下载并管理这些依赖。 ...

    maven-definitive-guide.pdf

    POM不仅是Maven的核心配置文件,也是Maven理解项目结构的基础。 #### 6. Maven与Ant的比较 Maven与Ant都是流行的构建工具,但它们之间存在显著差异。Ant是一种基于XML的脚本语言,更适合于定制化的构建过程;而...

    maven使用手册

    POM是Maven理解项目并进行构建的基础。 - **约定优于配置(Convention Over Configuration)**:Maven 提供了默认的构建规则,如源代码、资源文件和测试代码的存放路径,以及构建输出的位置等,减少了手动配置的...

    Maven入门到精通

    POM.xml文件位于项目的根目录下,是Maven理解项目的基础。 2. **坐标(Coordinates)**:每个Maven项目都有唯一的坐标,由groupId、artifactId和version组成,如`com.example:my-app:1.0.0`,这便于在Maven仓库中...

    maven用到的些东西

    每个Maven项目都有一个POM,它是Maven理解项目结构和需求的基础。 3. **生命周期(Lifecycle)**:Maven有一套预定义的构建生命周期,包括编译(compile)、测试(test)、打包(package)、验证(validate)、集成...

    apache-maven-3.3

    它是Maven理解项目并进行构建的基础。 2. **依赖管理**:Maven通过POM自动管理项目所需的库和其他依赖项。只需在POM中声明依赖,Maven就会自动下载并解决版本冲突。 3. **坐标**:每个Maven项目都有唯一的坐标,由...

    apache-maven-3.6.1.7z

    - **项目对象模型(POM)**:POM是Maven项目的基础,它是一个XML文件,包含了项目的基本信息、依赖、构建配置等,是Maven理解并操作项目的关键。 在实际使用中,用户可能需要根据自身环境调整`settings.xml`,例如...

    Maven学习书籍

    1. **项目对象模型(POM)**:POM是Maven的核心,它定义了项目的基本信息、依赖关系、构建配置等,是Maven理解和操作项目的基础。 2. **仓库(Repository)**:Maven依赖于远程仓库下载所需的库文件,包括中央仓库和...

    maven初级详细教程

    它是Maven理解并操作项目的关键。 2. **依赖管理(Dependency Management)** Maven通过POM中的`&lt;dependencies&gt;`标签管理项目的依赖关系,自动下载所需的库文件,避免了类路径冲突问题。 3. **坐标(Coordinates...

    apache-maven-3.2.5

    它是Maven理解项目结构和构建过程的关键。 2. **依赖管理**:Maven能够自动下载项目所需的各种库和框架,只需在POM中声明依赖即可。它遵循“依赖传递”原则,如果一个项目依赖于A,A又依赖于B,那么Maven会自动将B...

Global site tag (gtag.js) - Google Analytics