Maven2之旅

http://www.blogjava.net/sitinspring/category/23515.html

我的Maven2之旅:一.前言,准备及安装.

自从Java诞生以来,打包,测试,代码检测和发布Java工程就成为困扰Java程序员的枷锁,即使Ant出现,程序员深受困扰,而且Ant的Xml格式的Build文件的学习阶梯又给程序员加重了一层负担.程序员头顶上的天空依然阴霾,只到有了Maven的出现.

Maven的主要功能有:
1.构建项目(Builds)
2.文档编制(Documentation)
3.报告(Reporting)
4.依赖管理(Dependencies)
5.配置管理(SCMs)
6.发布管理(Releases)

和Ant一样,Maven也是Apache的一个子项目,但要简化和强大了许多,你可以从以下网页(http://maven.apache.org)得到它的所有信息.以前用Ant构建的项目纷纷都转向了Maven及其后继版本Maven2.比如著名的Struts2(http://struts.apache.org/2.x/):

要在你的机器上安装并运行Maven,首先你必须安装了JDK1.4以上的版本,并且在环境变量中设置了JAVA_HOME,否则Maven将找不到JRE,然后把如下地址(http://archive.apache.org/dist/maven/binaries/maven-2.0.3-bin.zip)的文件下载到本地.请注意,这不是目前的最新版本,当前的最新版本是2.0.6,但下载文件似乎有问题.Linux下的版本请下载其它相关版本.

Maven在Window系统上的安装.
一.将下载的文件maven-2.0.3-bin.zip解压到本地,这里假设你解压的路径为:C:maven-2.0.3.
二.将解压路径的bin目录添加到你机器的环境变量中.
      具体步骤:
     1.解压路径的bin目录为 C:maven-2.0.3in ,则把此路径拷贝下来.
            
     2.按下图打开系统的环境变量选项,将上述地址添加到path变量的尾后,记得中间要加分号.
     3.添加完的结果如下图:
         

    注:另一种方法是增加相应的环境变量maven_home=maven的解压目录,再在path中增加%maven_home%in;这两种方法效果都是一样的,各位可以选择自己喜欢的一种.

三.测试:打开Command窗口,输入mvn -version,如果按下图输出则表示安装正确.
         

至此Maven安装完成,轻松一下吧.如果希望对Maven2多了解一些,请下载这本电子书:
http://www.blogjava.net/Files/sitinspring/BetterBuildsWithMaven.rar

 

我的Maven2之旅:二.Maven常用命令

上一篇相信你已经安装了好了Maven,这次只想把一些基本命令列举一下,请把它们记在你的脑子中,懒一点也要记在你的笔记本上,因为你以后会常常用到它们.

1.创建Maven目录
mvn archetype:create -DgroupId=com.yourCompanyName -DartifactId=yourAppName

2.测试
mvn test

3.编译类
mvn compile

4.打包
mvn package

5.生成Site
mvn site

5.清除
mvn clean

以上命令都是在command窗口运行的.它们还可以混合运行,如mvn test compile package,在以后的讲述中会逐渐用到它们.

附录:

Maven的生命周期及其与之对应的命令
validate:验证工程是否正确,所有需要的资源是否可用。
compile:编译项目的源代码。
test-compile:编译项目测试代码。
test:使用已编译的测试代码,测试已编译的源代码。
package:已发布的格式,如jar,将已编译的源代码打包。
integration-test:在集成测试可以运行的环境中处理和发布包。
verify:运行任何检查,验证包是否有效且达到质量标准。
install:把包安装在本地的repository中,可以被其他工程作为依赖来使用
deploy:在整合或者发布环境下执行,将最终版本的包拷贝到远程的repository,使得其他的开发者或者工程可以共享。
generate-sources:产生应用需要的任何额外的源代码,如xdoclet。

我的Maven2之旅:三.Maven的一小步,个人的一大步

上一篇已经讲到了Maven的基本命令,今天我们就来小试牛刀一把.

此前,我们可以用Eclispe创建一个小的Java工程,本人创建了一个能输出"Hello!Maven!"的工程,它只有一个类,一个函数,不用猜你也能想到里面写的什么.

指的一提的是它的目录结构,下面是这个工程目录结构的截图:

为什么要在src底下放两层目录呢,一会将见分晓.

接下来,我们使用Maven创建一个HelloMaven的Maven项目,打开cmd窗口,转入你的Maven工程目录(本人机器上是C: mp),然后输入如下的命令:
mvn archetype:create -DgroupId=com.sitinspring -DartifactId=HelloMaven
其中,com.sitinspring告知了Maven工程的代码根目录,而HelloMaven是工程名.这段命令指示Maven创建一个HelloMaven的工程,它的代码根目录是com.sitinspring.命令运行后将生成一个名为HelloMaven的目录,其中有主目录,测试目录和工程文件pom.xml.

接到你的命令,Maven开始工作了,它输出了一大段文字,见下图:



你将得到一个名叫HelloMaven的目录,如下图:


在HelloMaven目录下,还将生成一个pom.xml的文件,它就是Maven生成的工程文件.暂时你不需要关心其具体内容.
因为接下来还有任务:把Eclispe工程中的Inlet.java文件放入C: mpHelloMavensrcmainjavacomsitinspring中.

然后打开cmd窗口,进入C: mpHelloMaven目录.执行命令:
mvn package
你将看到Maven再次输出一堆信息.如下图:


其后C: mpHelloMaven的目录结构如下图:


在target目录下,有classes目录.这是生成的class文件;根目录下还生成了我们的目标文件HelloMaven-1.0-SNAPSHOT.jar,它就是打包后的jar.

测试一下,我们打开cmd窗口,进入目录 C: mpHelloMaven arget,然后执行命令:
java -cp HelloMaven-1.0-SNAPSHOT.jar com.sitinspring.Inlet,你将看到Hello!Maven!被输出出来.如下图.


现在为止,我们未曾写一句代码就得到了项目的jar文件,你可以拿自己以前的工程来试试mvn package的功能了.
如果是Swing程序的话效果更好.下图是Swing程序包执行的效果.


本文例子下载一:http://www.blogjava.net/Files/sitinspring/MavenPakcageExample01.zip
本文例子下载二:http://www.blogjava.net/Files/sitinspring/MavenPakcageExample02.zip
(这个例子就是上图输出的Swing程序,但Src路径要深一些,所以DgroupId也不同,具体写法请大家揣摩)

附录:
Maven工程的目录结构:

Maven project root    
    pom.xml Maven2 project file Maven2项目文件
    src/    
        main/ project main directory 项目主体目录
                java source code directory 原码目录
                resources the directory of resource for source code 原码所需资源
                filters the directory of filtering resource files 原码所需资源文件过滤
                assembly Assembly descriptors  
                config the directory of configuration file  配置文件目录
        test    
                java test source code directory 测试原码目录
                resources the directory of resource for the test source code 测试原码所需资源
                filters the directory of filtering test resource files 测试原码所需资源文件过滤
        site the directory of site resource 与site相关的资源目录
    target the directory for output 输出目录
        classes the directory for output classes class 目录
        test-classes the directory for output test classes  test class 目录
        site the directory for output site and reports site 输出目录

我的Maven2之旅:四.Junit单元测试的活让Maven自动去干

上一讲已经说了打包,这次说说测试.

首先准备测试材料,这里我做了一个Calculator类以及测试它的类TestCalculator,它们的代码如下:
Calculator类:
package  com.sitinspring;

public   class  Calculator  {
    
public static void main(String[] arg) {
        System.out.println(
"Hello!Maven!");
    }


    
public int add(int op1, int op2){
        
return op1 + op2;
    }


    
public int sub(int op1, int op2){
        
return op1 - op2;
    }

}

TestCalculator类(Eclipse下进行单元测试通过):
package  com.sitinspring;

import  junit.framework.TestCase;

public   class  TestCalculator  extends  TestCase {
    
public void testAdd() {
        Calculator calculator 
= new Calculator();
        
int result = calculator.add(5020);
        assertEquals(
70, result);
    }


    
public void testSub() {
        Calculator calculator 
= new Calculator();
        
int result = calculator.sub(5020);
        assertEquals(
30, result);
    }

}



我们的目标是让Maven调用TestCalculator类来测试Calculator类.

首先我们还需要建立一个名为Calculator的Maven工程.请使用如下命令:
mvn archetype:create -DgroupId=com.sitinspring -DartifactId=Calculator

运行完毕后,展开Calculator目录,我们将发现如图结构:


简而言之,Src下的main目录是用来放置程序文件的,而Src下的main目录是用来放置单元测试文件的.
所以,Calculator类应该被放入Calculatorsrcmainjavacomsitinspring中;
而TestCalculator类应该被放入Calculatorsrctestjavacomsitinspring中.

如此办理后,让我们打开cmd窗口,进入Calculator目录,执行命令:
mvn test

上图可以看到TestCalculator类的执行结果显示测试通过,与Eclipse中测试结果相同.

有时候,MVN test,就是这么简单!

例程下载: http://www.blogjava.net/Files/sitinspring/MavenTest.zip

最后给大家留一个悬念,如果你安装了Maven的话,请在你的硬盘中搜索".m2",看看里面有什么?

我的Maven2之旅:五.pom.xml基本元素介绍



上面就是前次HelloMaven工程的pom.xml文件,我们可以通过修改其中的元素使工程按照我们的意图运行,对于接触Maven的人,主要就是和pom.xml文件在打交道.

pom.xml文件基本节点介绍:
<project>:文件的根节点.
<modelversion>:pom.xml使用的对象模型版本.
<groupId>:创建项目的组织或团体的唯一Id.
<artifactId>:项目的唯一Id,可视为项目名.
<packaging>:打包物的扩展名,一般有JAR,WAR,EAR等
<version>:产品的版本号.
<name>:项目的显示名,常用于Maven生成的文档。
<url>:组织的站点,常用于Maven生成的文档。
<description>:项目的描述,常用于Maven生成的文档。

下面我们来修改一下这些节点如下:


将上面两幅图比较一下,可以看到version,name,url,description都发生了变化。

执行mvn clean
然后执行mvn package
刚才的变化将反映在工程中。
从结果上说,打包出的jar文件由原来的HelloMaven-1.0-SNAPSHOT.jar变成了HelloMaven-1.0.0.jar.这是Version元素修改造成的结果.

执行mvn site后,在HelloMaven arget下将生成工程的site目录:


点击其中的project-info.html将出现如下画面.


和首次展示的Struts2首页画面比较,只是简陋一些,今天只是初体验一下mvn site的效果,如果你将工程逐渐完善起来,我敢肯定它能达到或超过Struts2的Maven工程的效果.

我的Maven2之旅:六.在Maven工程中将资源文件打包

在Java项目中不只是jav文件,经常会有许多资源文件,如属性文件,图片资源什么的,如何把它们也一起加载到Maven工程中去呢?这个问题不难,利用resource就可以达到这个目的.因为${basedir}/src/main/resources都会编译到jar文件中,而且该目录下的内容将直接位于jar文件的顶部.

下图是在前面已经用到过的程序Source Comparer程序,唯一不同的是它的Browse按钮是图片式的.


具体实现的代码是这样的:

String location = " /compare.GIF "
URL imageUrl
= BrowsePanel. class .getResource(location); 
        
browseBtn 
=   new  JButton( new  ImageIcon(imageUrl)); 


从上面的代码可以看出,程序是从类的根路径取得了图片资源compare.GIF,再赋给按钮browseBtn.所以Maven工程中也应该是一样的处理方式.现在的问题是如何把图片资源compare.GIF加载到jar文件中去.

Maven为此提供了一个方法,那就是在MavenResourcesrcmain下建立一个名为resources的目录,再把图片资源文件compare.GIF拷贝到里面,具体结构如下图:


执行mvn package后,用解压工具如WinRar打开MavenResource-1.0-SNAPSHOT.jar,可以发现图片compare.GIF已经被打进去了.


如果打开cmd窗口,进入target目录,执行命令:
java -cp MavenResource-1.0-SNAPSHOT.jar com.citigroup.junglesong.Inlet


执行的结果和在Eclipse中效果一致,这里就不再贴出了.

上面说的是程序执行时使用资源的情况,如果是测试代码需要使用资源的话,可以${basedir}/src/test下新建一个resources目录,将资源放入其中,测试代码可以使用这样的方式使用资源:
InputStream is = getClass().getResourceAsStream( "/test.properties" );
可见测试代码加载资源和主体代码加载资源是很相似的.

通过对pom文件中build 节点的修改,Maven还可以进行资源过滤,因为目前一时用不到暂时搁置一下,有兴趣或需要的人可以到http://maven.apache.org/guides/getting-started/index.html#How%20do%20I%20filter%20resource%20files? 去看看.

本文例子下载:
http://www.blogjava.net/Files/sitinspring/MavenResource20070620211407.zip

 

我的Maven2之旅:七.加载第三方开源库

java程序调用一堆第三方库是很常见的事情,例子程序中就调用了网上常见库jdom读取xml文件.

package  com.sitinspring;

import  java.io.InputStream;
import  java.util.Iterator;
import  java.util.List;

import  org.jdom.Document;
import  org.jdom.Element;
import  org.jdom.input.SAXBuilder;

public   class  Inlet {
    
public static void main(String[] arg){    
        
try{
            SAXBuilder builder
=new SAXBuilder ();
            InputStream is 
=Inlet.class.getResourceAsStream( "/testfile.xml" );
            Document doc
=builder.build(is);

            Element root
=doc.getRootElement();
            List ls
=root.getChildren();

            
for(Iterator it=ls.iterator();it.hasNext();){
               Element elm
=(Element )it.next();
               System.out.println(elm.getName());
            }
 
        }

        
catch(Exception ex){
            ex.printStackTrace();
        }

    }

}


如何让Maven工程也能找到Jdom库呢,很简单,添加一个dependency节点就能做到,详情请见下列代码的jdom处.

< 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.sitinspring </ groupId >
  
< artifactId > Maevn3ndPart </ artifactId >
  
< packaging > jar </ packaging >
  
< version > 1.0-SNAPSHOT </ version >
  
< name > Maevn3ndPart </ name >
  
< url > http://maven.apache.org </ url >
  
< dependencies >
    
< dependency >
      
< groupId > junit </ groupId >
      
< artifactId > junit </ artifactId >
      
< version > 3.8.1 </ version >
      
< scope > test </ scope >
    
</ dependency >
    
< dependency >
      
< groupId > jdom </ groupId >
      
< artifactId > jdom </ artifactId >
      
< version > 1.0 </ version >
      
< scope > compile </ scope >
    
</ dependency >
  
</ dependencies >
</ project >

然后执行Mvn compile就可以看见,Maven从网上下载了jdom库到本地的repository目录,请看下图.


将dependency节点和repository中jdom路径对比就可以知道,dependency节点中groupId对应路径中第一层目录,artifactId对应第二层,version对应第三层,而scope用于编译则是compile.这些发现我们以后还将用到.

本文例程:
http://www.blogjava.net/Files/sitinspring/Maevn3ndPart20070621133225.zip

附录:
Dependency Scope

在POM 4中,<dependency>中还引入了<scope>,它主要管理依赖的部署。目前<scope>可以使用5个值:

  • compile,缺省值,适用于所有阶段,会随着项目一起发布。
  • provided,类似compile,期望JDK、容器或使用者会提供这个依赖。如servlet.jar。
  • runtime,只在运行时使用,如JDBC驱动,适用运行和测试阶段。
  • test,只在测试时使用,用于编译和运行测试代码。不会随项目发布。
  • system,类似provided,需要显式提供包含依赖的jar,Maven不会在Repository中查找它。

我的Maven2之旅:八.加载自定义库

第七篇中讲述了加载第三方开源库的情况,但如果是公司或个人的私有库的话这样做就无效了.但我们可以根据上一篇中的发现"将dependency节点和repository中jdom路径对比就可以知道,dependency节点中groupId对应路径中第一层目录,artifactId对应第二层,version对应第三层".因此采用手工在本地的repository目录添加私有库的方法.

下图就是例程中的point库在repository目录中的路径图,将point.jar放在1.0.0目录中就可以了.


对于无法通过网络连接获得第三方开源库的情况也可以照此办理.

如果这个jar也是使用Maven编译成的,则可以用命令mvn install来安装到本地Repository库.

例程下载:
http://www.blogjava.net/Files/sitinspring/MavenSelfDependency20070621101501.zip

 

我的Maven2之旅:九.使用Maven一次编译多个工程.

如果我们有许多Maven工程需要编译,如果一个个敲命令怕要累死,写批处理又有点不太正规,幸好Maven采用了Module节点解决了我们的问题,可以通过一次命令编译打包所有的包.

下图中的MavenA和MavenB是两个需要编译打包的工程,MavenModules是它们的上级工程.


MavenA和MavenB的pom.xml一点也不需要改变,而MavenModules中的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 >
  
< groupId > com.sitinspring </ groupId >
  
< artifactId > MavenModules </ artifactId >
  
< packaging > pom </ packaging >
  
< version > 1.0.0 </ version >
  
< name > MavenModules </ name >
  
< url > http://www.blogjava.net/sitinspring </ url >
  
< modules >
    
< module > ModuleA </ module >
    
< module > ModuleB </ module >
  
</ modules >
</ project >


通过观察可以发现,有两点不同:
1.package节点设定为pom而不是jar,war等,这是主工程必需的,否则执行命令必报错.
2.添加了modules节点和其下的两个module节点,节点名正好是子目录,这样在MavenModules目录下执行compile,package等命令就会深入子目录去继续执行.

挺简单的,基本就是这么多.

例程下载:
http://www.blogjava.net/Files/sitinspring/MavenModules20070621135351.zip

 

我的Maven2之旅:十.更完整的报告.

以前我们尝试过一次Mvn site命令,但由于主控文件pom.xml并不周全,信息不是很完整.
而例子中的节点相对完整多了,使用它执行mvn site命令会生成很完整的报告出来,以下就是这个文件的详细内容:

< 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" >
    
<!--  The Basics  -->
    
< modelVersion > 4.0.0 </ modelVersion >
    
< groupId > com.citigroup.junglesong </ groupId >
    
< artifactId > MavenResource </ artifactId >
    
< packaging > jar </ packaging >
    
< version > 1.0-SNAPSHOT </ version >
    
< name > MavenResource </ name >
    
< url > http://maven.apache.org </ url >

    
<!--  dependent Libs  -->
    
< dependencies >
        
< dependency >
            
< groupId > junit </ groupId >
            
< artifactId > junit </ artifactId >
            
< version > 3.8.1 </ version >
            
< scope > test </ scope >
        
</ dependency >
    
</ dependencies >

    
<!--  Build Settings  -->
    
< reporting >
        
< plugins >
            
< plugin >
                
< artifactId >
                    maven-project-info-reports-plugin
                
</ artifactId >
                
< reportSets >
                    
< reportSet >
                        
< id > sunlink </ id >
                        
< reports >
                            
< report > javadoc </ report >
                        
</ reports >
                        
< inherited > true </ inherited >
                        
< configuration >
                            
< links >
                                
< link >
                                    http://java.sun.com/j2se/1.5.0/docs/api/
                                
</ link >
                            
</ links >
                        
</ configuration >
                    
</ reportSet >
                
</ reportSets >
            
</ plugin >
            
< plugin >
                
< groupId > org.apache.maven.plugins </ groupId > <!-- Generate Java Doc  -->
                
< artifactId > maven-javadoc-plugin </ artifactId >
            
</ plugin >
            
< plugin >
                
< groupId > org.apache.maven.plugins </ groupId > <!--  Code Check  -->
                
< artifactId > maven-checkstyle-plugin </ artifactId >
                
< configuration >
                    
< configLocation >
                        config/sun_checks.xml
                    
</ configLocation >
                
</ configuration >
            
</ plugin >
            
< plugin >
                
< groupId > org.codehaus.mojo </ groupId > <!--  Test Report  -->
                
< artifactId > surefire-report-maven-plugin </ artifactId >
            
</ plugin >
            
< plugin >
                
< groupId > org.codehaus.mojo </ groupId > <!--  HTMLize Source Code  -->
                
< artifactId > jxr-maven-plugin </ artifactId >
            
</ plugin >
            
< plugin > <!--  Find Bugs  -->
                
< groupId > org.codehaus.mojo </ groupId >
                
< artifactId > findbugs-maven-plugin </ artifactId >
            
</ plugin >
        
</ plugins >
    
</ reporting >

    
<!--  More Project Information  -->
    
< licenses >
        
< license >
            
< name > Apache 2 </ name >
            
< url > http://www.apache.org/licenses/LICENSE-2.0.txt </ url >
            
< distribution > repo </ distribution >
            
< comments > A business-friendly OSS license </ comments >
        
</ license >
    
</ licenses >

    
< organization >
        
< name > SitInSpring </ name >
        
< url > http://www.blogjava.net/sitinspring </ url >
    
</ organization >

    
< developers >
        
< developer >
            
< id > sitinsprng </ id >
            
< name > SitInSpring </ name >
            
< email > SitInSpring@ufo.com </ email >
            
< url > http://www.blogjava.net/sitinspring </ url >
            
< organization > UFO </ organization >
            
< organizationUrl > http://www.UFO.org </ organizationUrl >
            
< roles >
                
< role > architect </ role >
                
< role > developer </ role >
            
</ roles >
            
< timezone > +8 </ timezone >
            
< properties >
                
< picUrl > http://www.mxjava.com/logo.gif </ picUrl >
            
</ properties >
        
</ developer >

        
< developer >
            
< id > junglesong </ id >
            
< name > Junglesong </ name >
            
< email > junglesong@gmail.com </ email >
            
< url > http://www.blogjava.net/sitinspring </ url >
            
< organization > UFO </ organization >
            
< organizationUrl > http://www.UFO.org </ organizationUrl >
            
< roles >
                
< role > architect </ role >
                
< role > developer </ role >
            
</ roles >
            
< timezone > +8 </ timezone >
            
< properties >
                
< picUrl >
                    http://foto.yculblog.com/junglesong/TxtNovelGarden.gif
                
</ picUrl >
            
</ properties >
        
</ developer >
    
</ developers >

    
< contributors >
        
< contributor >
            
< name > Alien </ name >
            
< email > Alien@hotmail.com </ email >
            
< url > http://Alien.com </ url >
            
< organization > AlienOrganization </ organization >
            
< organizationUrl >
                http://AlienOrganization.com
            
</ organizationUrl >
            
< roles >
                
< role > tester </ role >
            
</ roles >
            
< timezone > -5 </ timezone >
            
< properties >
                
< gtalk > some.name@gmail.com </ gtalk >
            
</ properties >
        
</ contributor >
    
</ contributors >

    
< repositories >
        
< repository >
            
< releases >
                
< enabled > false </ enabled >
                
< updatePolicy > always </ updatePolicy >
                
< checksumPolicy > warn </ checksumPolicy >
            
</ releases >
            
< snapshots >
                
< enabled > true </ enabled >
                
< updatePolicy > never </ updatePolicy >
                
< checksumPolicy > fail </ checksumPolicy >
            
</ snapshots >
            
< id > codehausSnapshots </ id >
            
< name > Codehaus Snapshots </ name >
            
< url > http://snapshots.maven.codehaus.org/maven2 </ url >
            
< layout > default </ layout >
        
</ repository >
    
</ repositories >

    
<!--  Environment Settings  -->
    
< mailingLists >
        
< mailingList >
            
< name > User List </ name >
            
< subscribe > user-subscribe@127.0.0.1 </ subscribe >
            
< unsubscribe > user-unsubscribe@127.0.0.1 </ unsubscribe >
            
< post > user@127.0.0.1 </ post >
            
< archive > http://127.0.0.1/user/ </ archive >
            
< otherArchives >
                
< otherArchive >
                    http://base.google.com/base/1/127.0.0.1
                
</ otherArchive >
            
</ otherArchives >
        
</ mailingList >
    
</ mailingLists >
</ project >




上文中,粗略部分加上了注释,具体细节您可以和site下生成的系列文件对照一下,相信不用我再赘述.如果有疑问请参看Maven的pom介绍文档.

可以其中需要的部分摘取下来放到您的pom.xml中去,以生成所需要的报告.

例程下载:
http://www.blogjava.net/Files/sitinspring/MavenResourceReportsAndAddInfo20070622153905.zip

 

我的Maven2之旅:十一.打包一个web工程.

目标:将一个web工程打包.
其目录如下:


使用如下命令创建Maven工程:
mvn archetype:create -DgroupId=com.junglesong.mytodo -DartifactId=mytodo -DarchetypeArtifactId=maven-archetype-webapp

创建工程后我们还需要做以下工作:
1.将Eclipse工程MyTodoWEB-INFsrccom下所有目录及文件拷贝到maven工程mytodosrcmainjava下,这是做源码拷贝工作.
2.将Eclipse工程MyTodoWEB-INF下web.xml和todo.xml拷贝到maven工程mytodosrcmainwebappWEB-INF下,web.xml就不肖说了,而todo.xml是做持久化用的,供源码使用,故而要拷贝.
3.将Eclipse工程MyTodo下web目录拷贝到mytodosrcmainwebapp下,这是做页面文件拷贝工作.
到此文件转移完成.

此后,我们还需要修改一下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 >
  
< groupId > com.junglesong.mytodo </ groupId >
  
< artifactId > mytodo </ artifactId >
  
< packaging > war </ packaging >
  
< version > 1.0-SNAPSHOT </ version >
  
< name > mytodo 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 >
    
< dependency >
      
< groupId > dom4j </ groupId >
      
< artifactId > dom4j </ artifactId >
      
< version > 1.6.1 </ version >
      
< scope > compile </ scope >
    
</ dependency >
    
< dependency >
      
< groupId > javax.servlet </ groupId >
      
< artifactId > servlet-api </ artifactId >
      
< version > 2.4 </ version >
      
< scope > provided </ scope >
    
</ dependency >
  
</ dependencies >
  
< build >
    
< finalName > mytodo </ finalName >
  
</ build >
</ project >


值得注意的是dependency中servlet一处的写法.

此后执行mvn package 我们就会得到打包文件mytodo.war.

打开Tomcat Web Application Manager 页面,将mytodo.war载入后,输入:
http://127.0.0.1:8080/mytodo/ShowPage
将出现如下画面:


执行原有的操作都能正确反映,说明我们这一路过程都是正确的.

例程下载:
http://www.blogjava.net/Files/sitinspring/mytodoMvnPrj20070626094131.zip

 

我的Maven2之旅:十二.使用JDK1.5编译Maven工程

现在JDK1.5已经越来越普及了,使用它编写或者改写的程序也越来越多,当我们把符合JDK1.5新语法特征的程序送给maven编译时会出现下列问题.



这时该如何使用 -source 1.5 以启用泛型呢,将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 >
    
< groupId > com.junglesong </ groupId >
    
< artifactId > sqlanywhere </ artifactId >
    
< packaging > jar </ packaging >
    
< version > 1.0.3 </ version >
    
< name > sqlanywhere </ name >
    
< url > http://maven.apache.org </ url >
    
< dependencies >
        
< dependency >
            
< groupId > junit </ groupId >
            
< artifactId > junit </ artifactId >
            
< version > 3.8.1 </ version >
            
< scope > test </ scope >
        
</ dependency >
        
< dependency >
            
< groupId > dom4j </ groupId >
            
< artifactId > dom4j </ artifactId >
            
< version > 1.6.1 </ version >
            
< scope > compile </ scope >
        
</ dependency >
        
< dependency >
            
< groupId > log4j </ groupId >
            
< artifactId > log4j </ artifactId >
            
< version > 1.2.14 </ version >
            
< scope > compile </ scope >
        
</ dependency >
    
</ dependencies >

    
< build >
        
< finalName > sqlanywhere1.0.3 </ finalName >
        
< plugins >
            
< plugin >
                
< artifactId > maven-compiler-plugin </ artifactId >
                
< configuration >
                    
< source > 1.5 </ source >
                    
< target > 1.5 </ target >
                
</ configuration >
            
</ plugin >
        
</ plugins >
    
</ build >
</ project >


上面<build>节点中的<plugin>部分就是我们要添加的,就这么简单.

             < plugin >
                
< artifactId > maven-compiler-plugin </ artifactId >
                
< configuration >
                    
< source > 1.5 </ source >
                    
< target > 1.5 </ target >
                
</ configuration >
            
</ plugin >

 

此后mvn将使用jDK1.5编译程序.

推荐文章

java.lang.ClassCastException: oracle.sql.BLOB无法强制转换为oracle.sql.BLOB

java.lang.ClassCastException: oracle.sql.BLOB无法强制转换为oracle.sql.BLOB

推荐文章

Android系统中的用户界面设计

Android系统中的用户界面设计

推荐文章

OpenCV图像处理

OpenCV图像处理

推荐文章

从nsNumberFormatterNumberFromString获取零

从nsNumberFormatterNumberFromString获取零

推荐文章

Tridion UI-“错误请求”

Tridion UI-“错误请求”

推荐文章

显示alertview后如何移动到下一个视图控制器

显示alertview后如何移动到下一个视图控制器

推荐文章

如何像HTML编辑器一样自动给代码着色

如何像HTML编辑器一样自动给代码着色

推荐文章

转换从URL中提取的字符串获取JSON对象

转换从URL中提取的字符串获取JSON对象

推荐文章

如果不在表1中,则根据2个字段从表2中删除

如果不在表1中,则根据2个字段从表2中删除

推荐文章

Android处理多个列表的有效方式

Android处理多个列表的有效方式

推荐文章

Axis2错误的Pojo Web服务

Axis2错误的Pojo Web服务

推荐文章

Android:WebView硬件加速只显示白色屏幕

Android:WebView硬件加速只显示白色屏幕

推荐文章

禅第n元素

禅第n元素

推荐文章

在HTML5画布的多个边界内拖放图像

在HTML5画布的多个边界内拖放图像

推荐文章

如何使输入字段接受区域设置相关的数字格式?

如何使输入字段接受区域设置相关的数字格式?

推荐文章

在tcsh中,如何在反引号中获取命令的退出状态?

在tcsh中,如何在反引号中获取命令的退出状态?