`

Maven 2.0:编译、测试、部署、运行

阅读更多

Maven 2.0:编译、测试、部署、运行

Maven是新一代的生力军,它的境遇正好和几年前的Ant十分类似。 Maven1.0已经历了几年的时间,并且作为Ant的替代品已被广大的开发人员所接收,但它并没有在很大程度使开发人员从Ant的build.xml文件中解脱出来。Maven1.0速度慢并且笨拙,使用起来的困难度并不亚于使用Ant的项目。事实上,它的核心是基于Ant实现的。在经过了几乎彻底的重写后,Maven2.0诞生了。

版权声明:任何获得Matrix授权的网站,转载时请务必保留以下作者信息和链接
作者:Chris Hardin;mycj(作者的blog:http://blog.matrix.org.cn/page/mycj)
原文:http://www.onjava.com/pub/a/onjava/2006/03/29/maven-2-0.html
Matrix:http://www.matrix.org.cn/resource/article/44/44475_Maven2.html
关键字:Maven2

Maven2.0的优点

Maven2.0有许多很好功能,这些功能不仅仅是帮助您构建项目。如果您刚刚开始启动一个Java项目,并且想使该项目快速地开展下去,Maven2.0能够在几分钟内达到您的要求。以下是Maven2.0的一些优点:
--标准的项目布局和项目结构生成器
--标准的依赖管理机制
--多项目支持
--在开发者需要的时候及时地下载新的插件和功能部件
--生成最新项目信息的网站
--集成了源代码控制软件:CVS和Subversion

以上列表展示的只是Maven2.0特点中的一小部分。但这足以使Maven2.0成为一个构建管理系统可靠的选择。既然我们已经知道Maven是个什么东西了,接下来让我们看看如何使用它。

入门

我们要做的第一件事情就是设置目录结构,但这并不需要让我们手动设置,Maven会根据您开发的项目类型来为您做这件事。一旦您下载并解压了最新发布的 Maven 2.0,您应该将Maven所在目录下面的bin目录添加到您的系统路径下。您可以运行命令mvn -version来测试您的安装。

既然已经安装上了工具,让我们看看创建一个简单的Java项目的例子。Maven使用原型来决定目录结构是如何展现的。Maven自带了几个内建的原型,您也可以自定义原型。

mvn archetype:create -DgroupId=com.oreilly -DartifactId=my-app

您看,这就生成了我们的项目布局。
my-app
----src
----main
----java
----com
----oreilly
----test
----java
----com
----oreilly

对,就这么简单。这种目录结构可以通过创建一个新的原型来覆写,但并不推荐这么做,因为Maven的一个优点就是使用标准的目录结构。该目录结构包含两个源代码树,一个是Java应用程序的源代码,另一个是单元测试代码。同时您也许会注意到,当第一次运行Maven的时候,它会进行一些下载工作。当您开始调用工具时,Maven会根据您使用的插件来更新自身的一些所需功能。Maven默认会从Ibiblio存储库中得到更新。您可以在Maven安装目录下的 conf目录中,或者项目自身中修改Maven远程存储库的选择。
您会发现Maven在my-app目录下创建了一个pom.xml文件。这是项目的最基本部分。pom.xml文件包含了一组指令,这些指令告诉Maven如何构建项目和包含哪些其它的特殊指令(POM是“项目对象模型”的缩写)。在默认的情况下,Maven包含了JUnit的依赖以此来鼓励单元测试。

<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>
<groupId>com.oreilly</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>



创建完项目后,我们可以往项目里添加代码并使用Maven的所有全新技巧。注意以下命令必须在pom.xml文件所在的目录中运行。
--mvn test:运行应用程序中的单元测试
--mvn package:依据项目生成jar文件
--mvn install:将项目的jar文件添加到库中, 以备依赖此项目时使用
--mvn site:生成项目相关信息的网站
--mvn clean:清除目标目录中的生成结果
--mvn eclipse:eclipse:生成Eclipse项目文件

接下来我们看看稍微复杂点的地方,我们知道手动开始一个Java web项目比手动开始一个简单的Java项目更耗时,然而Maven的使用则能化难为易。下面的例子(实际上是一行命令)展现了项目结构的构造。
mvn archetype:create -DgroupId=com.oreilly
-DartifactId=Oreilly
-DarchetypeArtifactId=maven-archetype-webapp

生成的结果结构如下所示:
Oreilly
----src
----main
----resources
----webapp
----WEB-INF

这一次,我们的项目由于支持了将包含在war文件中的web资源而设置有所不同。pom.xml文件中将包含一行来表明项目应该被打包成war文件: <packaging>war</packaging>。现在就可以使用mvn package命令来生成war文件。不用担心如何从WEB-INF/lib目录中得到依赖项,在依赖属性值被设置成compile的情况下,Maven 会自动包含依赖项。也可以将以下代码添加到pom.xml文件中来改变war文件的名称:

<build>
<finalName>PromoteC</finalName>
</build>



依赖管理

创建好项目结构,添加完一些代码,测试并编译好应用程序后,接下来可以看看Maven是如何处理依赖关系的。为了给项目添加一个依赖项,必须将此依赖项添加到pom.xml文件中。下次运行Maven的时候,它将从Ibiblio存储库中得到这个依赖项,并且将此依赖项添加到项目构建路径中。

关于依赖的问题有几个重要的事情值得注意。在写这篇文章的时候,Maven中最大的麻烦之处就是不能从Maven存储库中获取Sun的jar文件。这个问题归因于Sun在其代码中设置的许可证限制。解决这个问题的办法有两种,一种是下载这些代码并将它们安装在您本地的存储库中,另一种是做一个外部声明,并将这个声明指向文件系统中依赖项所在的位置。希望Sun能够尽早地创建自己的存储库,尽管如此,Maven也会被升级来使之能够下载这些资源,只是在下载之前它会提示用户接受许可证协议。

另外一个麻烦的地方就是有时候使用的最新的库文件可能在远程存储库中不存在。另一种可能是由于无法访问 Internet,需要所有的依赖项都能在本地获取。这些问题的最好解决方案就是将jar文件安装到本地的存储库中。将本地的存储库放在一台web服务器上也同样是个便利之举,这样整个开发团队就能从此获益,每个人都没有必要去管理自己的存储库了。改变Maven的存储库路径只需简单地编辑其安装目录下 conf文件夹下面的settings.xml文件即可。

在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:默认值。表明是所有任务所需的资源
--test:运行所有的测试用例时所需资源
--runtime:表明是运行时所需资源
--provided:JDK部分或应用服务器的classpath所需的资源

现在,如何处理那些麻烦的Sun的jar包和那些需要但却不能在远程存储库中找到的jar包了?我们必须使用Maven来手动将这些jar包安装到本地的存储库中。不用担心,这没有听上去那么困难。为了做个示例,我们将安装Java Activation框架的jar包。首先我们必须从Sun的站点上下载此jar包,接着我们使用Maven将它导入本地的存储库中。您自己也可以按照 Maven上传资源指南中的指导将缺少的jar包安装到Ibiblio中。
mvn install:install-file -Dfile=activation.jar
-DgroupId=javax.activation -DartifactId=activation
-Dversion=1.0 -Dpackaging=jar

现在,新的jar包就像其它的项目依赖项一样安装到了本地存储库中。在只需添加依赖声明后,我们就已准备就绪了。在添加jar包和声明它们为依赖项时,必须确保版本信息的正确性。版本的不匹配会导致Maven在寻找资源时的失败。在导入Sun的jar包时,如果您需要寻求标准命名参数的帮助,可以参考Sun 标准jar包命名。记住,在目前您不能通过存储库来公开发布这些jar包,这将违反Sun的使用条款。

<dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
<version>1.0</version>
<scope>compile</scope>
</dependency>



您或许想将依赖项存入一个源代码控制器的库中,源代码控制器决不能执行这个任务。依赖项是经常变化的,并且通常有一套数字方案来标明其版本。这就是说,您明确地希望有一个内部远程存储库的备份,如果您有一个,这将确保在存储库服务器崩溃并且不能恢复的情况下,您不会丢失所有的自定义资源。不将依赖项放入源代码控制器中也会节省源代码控制器的存储库服务器上的大量磁盘空间。

配置存储库

要求项目的每个开发者必须在conf目录中配置存储库是不方便的,所以Maven可以同时查看多个存储库并且将它们全部配置在pom.xml文件中。让我们看看一个例子,它展示了如何在应用程序用使用多个存储库。在以下从pom.xml文件摘录的片断中,我们设置了两个存储库来让Maven寻找依赖项。 Ibiblio一直是默认的存储库,我们又添加了Planet Mirror作为后援存储库。我们也可以让团队使用的本地web服务器作为第二个存储库。

<repositories>
<repository>
<id>Ibiblio</id>
<name>Ibiblio</name>
<url>http://www.ibiblio.org/maven/</url>
</repository>
<repository>
<id>PlanetMirror</id>
<name>Planet Mirror</name>
<url>http://public.planetmirror.com/pub/maven/</url>
</repository>
</repositories>



使用pom.xml父文件来构建多个项目

软件公司通常的一种做法就是将多个项目构建到主要产品中。维护依赖关系链和一次性地构建整个产品足以成为一个挑战,但是如果使用Maven的话,事情将变得简单。如果您创建了一个指向其它子模块的pom.xml父文件,Maven将为您处理整个构建过程。它将分析每个子模块的pom.xml文件,并且按照这些子模块的相互依赖顺序来构建项目。如果每个项目明确地指明它们的依赖项,那么子模块在父文件中的放置顺序是不造成任何影响的。但是考虑到其他的开发者,最好保证子模块在pom.xml父文件中的放置顺序和您期望的子项目被构建的顺序一样。下面我们看个示例。
pom.xml主文件如下:

<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.oreilly</groupId>
<version>1.0-SNAPSHOT</version>
<artifactId>my-app</artifactId>
<packaging>pom</packaging>
<modules>
<module>Common</module>
<module>Utilities</module>
<module>Application</module>
<module>WebApplication</module>
</modules>
</project>



我们需要确保WebApplication子模块包含了所有的三个jar包,所以需要将这些jar包声明为依赖项。在这个例子中,Utilities项目依赖于Common项目,所以Utilities项目中需要添加一个对Common项目的依赖。Application子模块也是同样的道理,因为它依赖于 Common和Utilities项目,Utilities又赖于Common。如果这个例子中有60个子模块,并且它们都相互依赖,这会使得新开发者难以算出什么项目依赖于其它项目,所以这正好是要求确保pom.xml父文件中项目放置顺序要清除的原因。

以下是Utility模块的依赖项:

<dependencies>
<dependency>
<groupId>com.oreilly</groupId>
<artifactId>Common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>



以下是如何声明Application模块的依赖项:

<dependencies>
<dependency>
<groupId>com.oreilly</groupId>
<artifactId>Common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.oreilly</groupId>
<artifactId>Utilities</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>



最后是WebApplication模块的依赖项:

<dependencies>
<dependency>
<groupId>com.oreilly</groupId>
<artifactId>Common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.oreilly</groupId>
<artifactId>Utilities</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>

<dependency>
<groupId>com.oreilly</groupId>
<artifactId>Application</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>

</dependencies>



现在,我们只需为每个子模块的pom.xml文件添加一个元素来表明它们是一个逻辑构建的一部分:

<parent>
<groupId>com.oreilly</groupId>
<artifactId>my-app</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>



在pom.xml父文件所在的同一个目录中,存在有项目目录:Common, Utilities, Application, 和WebApplication。当我们在该目录中运行mvn package命令时,这些项目会按照依赖顺序而被构建。

插件和报表

Maven2.0 有大量的插件可以使用。不幸的是,由于Maven的重写,Maven1.0的插件不能在2.0中使用。尽管如此,还是存在一些可以使用的Maven2.0 的插件。下面pom.xml文件中的插件配置示例是直接从Maven2.0网站上得来的。这个插件是用来配置编译选项的。

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



Maven报表插件可以用来生成不同的报表,这些报表是在当你使用mvn site命令生成项目的站点时产生的。下面的例子展示了如何使用<reporting>元素来配置这类插件中的一个。

<reporting>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-project-info-reports-plugin</artifactId>
</plugin>
</plugins>
</reporting>



Maven Plugin Matrix是一个十分实用的工具,它能给出哪些Maven插件适合于哪些版本的Maven。

Maven 和 Eclipse

如何能使全世界最好的IDE变得更好了?答案是使用Maven2的插件,它能帮助您寻找依赖项并自动地将它们添加到pom.xml文件中。虽然最好的方法是首先使用Maven来创建您的项目,然后再用命令mvn eclipse:eclipse来生成Eclipse项目文件,这样最初就能得到一个好的目录结构,但Maven也可通过其Eclipse插件来管理任何项目。

您可以在Eclipse自身的升级器中输入站点http://m2eclipse.codehaus.org/来安装插件。在安装完成并重启IDE后,您需要在Eclipse的参数选项中配置此插件,设置本地存储库的位置。这是很重要的一步,因为如果Eclipse默认的存储库不能匹配您默认的需求,Maven会重新下载您的依赖项。配置完成后,将项目导入Eclipse,鼠标右击该项目,选择Maven 2 -> Enable。现在您可以回到之前的步骤,您可以有更多的选项比如添加依赖项,这将弹出一个搜索框,您可以搜索依赖项并添加它们,插件会替你编辑 pom.xml文件。

插件会使用Maven来构建您的项目,就像Eclipse使用Ant来构建项目一样。如果您想获取更多的关于Eclipse整合Maven的信息,可以查阅Maven站点上的Eclipse集成Maven 2.x使用指南。

另一方面,如果您是一个IntelliJ使用爱好者,您也能通过运行指令mvn idea:idea来完成同样的任务。这些IDE 工具能够节省开发人员的时间。例如,如果一个开发人员为一个项目添加了一些特征,团队里的其他开发人员只需从源代码控制器的存储库中重新获取项目文件即可,这就节省了每个开发人员必须配置IDE的时间。

结论

Maven2.0 有着许多实用的特点,并且完成任务十分出色。Maven中最值得称赞的地方就是使用了标准的目录结构和部署。这就使得开发人员能够适应不同的项目,并且不用学习任何结构方面新的东西,也不用掌握特殊的指令来构建结构。Maven可以通过纯脚本来实现。在文档方面,由于使用了项目站点构建工具,所以当项目构建完成后,您可以查看所有开发的当前状态。

毫无疑问,当提到构建配置的伸缩性,易用性和项目管理方面时,Maven2.0足可以将Ant 取而代之。在接下来的几年内,我们将看到Maven作为标准构建技术更多的使用,直到有人带来了大家公认的“高级捕鼠器”。您可以从下面列出的Maven 项目站点上下载Maven

 

初试Maven2
作者: itren2006 发表日期: 2006-08-05 14:59 文章属性: 转载 复制链接


最近研究了一下Maven2,官方网站上的资料是又少又乱,折腾了好久终于搞明白一些,拿出来与大家分享。

一个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>

分享到:
评论

相关推荐

    Maven_2.0编译、测试、部署、运行

    Maven_2.0编译、测试、部署、运行,Maven_2.0编译、测试、部署、运行

    maven2经典(新手必备).doc

     Maven 2.0:编译、测试、部署、运行 http://www.ideagrace.com/html/doc/2006/06/14/00847.html  Maven2 的新特性 http://www-128.ibm.com/developerworks/cn/opensource/os-maven2/index.html 二、maven2安装 ...

    dubbox编译、环境搭建、服务提供和服务消费及学习资料

    4.2 编译部署资料 zookeeper 安装包:zookeeper-3.4.6.tar.gz dubbo源码:dubbo-master-2.5.4-SNAPSHOT.zip dubbox源码:dubbox-master-2.8.4.zip源码 dubbo.xsd 文件:dubbo-opensesame-master-xsd-20170815....

    基于 OAuth2.0 协议的跨域认证授权开发套件.zip

    测试框架和工具则协助开发者编写和运行单元测试、集成测试及性能测试,确保软件质量。 版本控制与协作: 通过集成Git、SVN等版本控制系统,支持团队成员间的代码共享、分支管理、合并请求和冲突解决。 可视化...

    vaadin-ticket:我需要票务演示应用程序

    运行Maven“安装”目标,并将生成的WAR文件部署到Java应用程序服务器。 您需要Vaadin Charts的许可证才能编译窗口小部件集。 您可以访问并单击橙色的“免费试用密钥”按钮,以获得30天的免费试用许可证。 它为您...

    vaadin:gwt 之间集成概念的证明,使用 vaadin 和 r Shiny 组成强大的数据分析组件

    Vaadin QuickTickets 仪表板演示官方演示应用程序的来源: :运行应用程序运行 Maven 'install' 目标并将生成的 WAR 文件部署到您的 Java 应用程序服务器。 您需要 Vaadin Charts 的许可证才能编译小部件集。 您可以...

    ufc:uglyfacecontest

    在本地主机中打开:8080 运行Maven“安装”目标,并将生成的WAR文件部署到Java应用程序服务器。 您需要Vaadin Charts的许可证才能编译窗口小部件集。 您可以访问并单击橙色的“免费试用密钥”按钮,以获得30天的...

    lkl-hole:这是一个小树洞

    后端使用maven进行构建,编译需要安装maven。 进入到hole-server文件夹,执行以下命令: mvn clean install 构建完毕后,进入到hole-service文件夹,执行以下命令: java -jar hole-service.jar & 开启Dubbo服务,...

    t淘淘商城项目 商城项目 视频和源码教程 详细

    不使用maven:工程部署时需要手动复制jar包。完成工程构建。非常繁琐。 使用maven进行工程构建: 使用maven可以实现一步构建。 3.3.1. 后台管理系统的工程结构 继承: 依赖: 后台管理系统工程结构...

    rival:RiVal推荐系统评估工具包

    该页面包含有关如何使用RiVal代码以及如何编译RiVal的信息。 有关RiVal和文档的更多信息,请访问RiVal或 。 如果您以前没有使用过RiVal,请查阅《指南》。 RiVal在Apache License 2.0版下可用。 安装和依赖性管理 ...

Global site tag (gtag.js) - Google Analytics