Chinaunix首页 | 论坛 | 博客
  • 博客访问: 30479956
  • 博文数量: 708
  • 博客积分: 12163
  • 博客等级: 上将
  • 技术积分: 8240
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-04 20:59
文章分类

全部博文(708)

分类: Java

2009-11-13 16:50:38

打一个JAR包非常简单,可以通过如下命令完成:
 
C:\mvnbook\my-app> mvn package
 
如果你看一下项目的POM文件,你会发现打包被设成了JAR,这就是Maven如何知道通过上面的命令来打一个JAR包的原因(关于此稍后会看到更多)。看一下目标目录就会看到生成的JAR文件。
 
现在,将把生成的Jar文件放入本地库,以可以让其他的项目使用。
/.m2/repository目录是本地库的默认位置,执行如下命令安装:
 
C:\mvnbook\my-app> mvn install
 
执行完该命令你会看到如下输出:
[INFO]-------------------------------------------------------------------
[INFO] Building Maven Quick Start Archetype
[INFO] task-segment: [install]
[INFO]-------------------------------------------------------------------
[INFO] [resources:resources]
[INFO] [compiler:compile]
Compiling 1 source file to /my-app/target/classes
[INFO] [resources:testResources]
[INFO] [compiler:testCompile]
Compiling 1 source file to /my-app/target/test-classes
[INFO] [surefire:test]
[INFO] Setting reports dir: /my-app/target/surefire-reports
-------------------------------------------------------
T E S T S
-------------------------------------------------------
[surefire] Running com.mycompany.app.AppTest
[surefire] Tests run: 1, Failures: 0, Errors: 0, Time elapsed: 0.001 sec
Results :
[surefire] Tests run: 1, Failures: 0, Errors: 0
[INFO] [jar:jar]
[INFO] Building jar: /my-app/target/my-app-1.0-SNAPSHOT.jar
[INFO] [install:install]
[INFO] Installing c:\mvnbook\my-app\target\my-app-1.0-SNAPSHOT.jar to \
com\mycompany\app\my-app\1.0-SNAPSHOT\my-app-1.0-SNAPSHOT.jar
[INFO]-------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO]-------------------------------------------------------------------
[INFO] Total time: 5 seconds
[INFO] Finished at: Tue Oct 04 13:20:32 GMT-05:00 2005
[INFO] Final Memory: 3M/8M
[INFO]-------------------------------------------------------------------
注意Surefire插件(用以执行测试),使用特定的命名规则,来查找包含在文件中的测试文件。默认情况下,如下的测试会被包含:
**/*Test.java
**/Test*.java
**/*TestCase.java
相反,如下测试不被包含:
**/Abstract*Test.java
**/Abstract*TestCase.java
现在你已经完成了设置、构建、测试、打包以及安装一个典型Maven项目的流程。对于使用Maven进行构建的项目来讲,这覆盖了用户要执行的主要任务,并且你已经注意到了,做到这一点都是由一个仅有18行的POM文件所驱动的。
 
当然,Maven还有更多功能供你使用,而不需要给POM文件增加任何东西,因为它已经存在了。相比而言,要想获得Ant构建脚本以外的功能,你必须使用容易出错的插件。
 
那么,是什么另外的你可以改变的功能给了Maven重用构建逻辑的能力?即使最简单的POM,也有数量可观的插件在幕后工作着。本章我们会详细介绍其中的一个,它是Maven获得高度评价的特性之一。不需要做什么,POM就有足够的信息来为你的项目产生一个Web站点。虽然你想定制你的Maven站点,如果你时间很紧促,而且仅仅需要创建一个基本的站点话,只需要执行如下命令即可:
 
C:\mvnbook\my-app> mvn site
 
另外还有很多的独立目标(goal)可以被使用,例如:
 
C:\mvnbook\my-app> mvn clean
 
这会在开始前,连带旧的构建数据一起移除,因此它是新的。也许你打算为项目生成一个IntelliJ IDEA项目描述文件:
 
C:\mvnbook\my-app> mvn idea:idea
 
这个可以在刚才的IDEA项目顶级运行。既然这样,它会更新设置而不是开始一个新的。
 
或者,你也许希望生成一个Eclipse描述符:
 
C:\mvnbook\my-app> mvn eclipse:eclipse
 
打包的时候,如果遇到maven库里面没有的更新的第三方库,比如hibernate 3.3.1 ga,那么就要自己进行安装了,命令如下:
C:\Users\Administrator> mvn install:install-file -DgroupId=org.hibernate -Dartif
actId=hibernate -Dversion=3.3.1.ga -Dpackaging=jar -Dfile=D:\Downloads\Develope\
hibernate\hibernate-distribution-3.3.1.GA\hibernate3.jar
 
装完查看库结构,发现已经加进去了:
 
如果是自己开发并打包的的.jar
也可以用mvn install:install-file放进本地的maven库中,前提是你已经配置了自己的本地库:

添加本地jar文件到本地maven仓库

mvn install:install-file -Dfile=easyjweb-core-1.0-m3.jar -DgroupId=com.easyjf.easyjweb -DartifactId=easyjweb-core -Dversion=1.0-m3 -Dpackaging=jar
mvn install:install-file -Dfile=easyjweb-ext-1.0-m3.jar -DgroupId=com.easyjf.easyjweb -DartifactId=easyjweb-ext -Dversion=1.0-m3 -Dpackaging=jar
 
说明:上面的第一条命令是把easyjweb-core-1.0-m3.jar传到了本地仓库中(假设本地仓库地址为:C:\Maven\repository\),上传到仓库中的jar包名为easyjweb-core-1.0-m3.jar,目录结构为com/easyjf/easyjweb/easyjweb-core/1.0-m3/easyjweb-core-1.0-m3.jar
第二条命令是把easyjweb-ext-1.0-m3.jar传到了本地仓库中(假设本地仓库地址为:C:\Maven\repository\),上传到仓库中的jar包名为easyjweb-ext-1.0-m3.jar,目录结构为com/easyjf/easyjweb/easyjweb-ext/1.0-m3/easyjweb-ext-1.0-m3.jar
 
 
 

 Maven2如何使用私有Repository

早在Celtix, 和之前的CXF里,我们在maven里定义私有的Repository, 因为我们所依赖的Jar, 还没发布到Maven的Repository里,或者,那个项目压根儿就不用maven来构建。
配置其实很简单:
修改pom.xml, 加入下面这个片段,

    >
        >
            >private-repo>
            >private repo>
            >file:${basedir}/${topDirectoryLocation}/maven_repo>
            >
                >true>
            >
            >
                >true>
            >
        >
    >
 


并定义这个变量:

    >
        >.>
     >
 

在maven_repo里就可以存放你得jar, 目录结构应该和.m2/repository一致
如果jar还没有pom, 则需要写一个pom, 例如下面就是一个例子:

 
>
  >4.0.0>
  >htmlunit>
  >htmlunit-patch>
  >1.10>
  >htmlunit patch jar>
  >>
  >
    >>
  >
  >
    >
      >htmlunit>
      >htmlunit>
      >1.10>
    >
  >
>
 

此外你还需要为jar, 和pom ,做出sha1文件,可以使用工具sha1sum, windows上需要安装cygwin才可以使用这个工具。

Maven 在无法找到这个artifact时候才会去private repository里找, 并安装到.m2目录下。之后就不会从这个目录取了
所以他和运行时classpath没有关系,Maven不会把private repo里的patch jar放在classpath的最前面,maven 本身并不能让我们来改变classpath, 所以如果是你自己的patch jar, 你无法通过这个方法来得到解决,唯一的解决方法就是把你的patch 和原jar合并为一个。或者是用来解决您的问题。

阅读(4026) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~