Maven简介、安装与使用

1 Maven简介

Maven是一个java项目管理工具,深化了ant,但又有自己一整套的项目集成策略。Apache Maven一个潜在的基于java的apache ant的构建工具的替代者。
Maven与ant两者之间的比较:
第一:ant脚本是可以直接运行在maven中的。maven和ant最大的差别就是在于maven的编译以及所有的脚本都有一个基础,就是POM (project object model)。这个模型定义了项目的方方面面,然后各式各样的脚本在这个模型上工作,而ant完全是自己定义,显然maven更胜一筹。
第二:Maven对所依赖的包有明确的定义,如使用那个包,版本是多少,一目了然。而ant则通常是简单的inclde 所有的jar。导致的最终结果就是,你根本无法确定JBoss中的lib下的common-logging 是哪个版本的,唯一的方法就是打开 META-INF 目录下MANIFEST.MF。估计JBoss迟早会转向Maven的。
第三:Maven是基于中央仓库的编译,即把编译所需要的资源放在一个中央仓库里,如jar,tld,pom等。当编译的时候,maven会自动在仓库中 找到相应的包,如果本地仓库没有,则从设定好的远程仓库中下载到本地。这一切都是自动的,而ant需要自己定义了。这个好处导致的结果就是,用maven 编译的项目在发布的时候只需要发布源码,小得很,而反之,ant的发布则要把所有的包一起发布,显然maven又胜了一筹。
第四:maven有大量的重用脚本可以利用,如生成网站,生成javadoc,sourcecode reference等。而ant都需要自己去写。
第五:maven目前不足的地方就是没有象ant那样成熟的GUI界面,不过mavengui正在努力中。目前使用maven最好的方法还是命令行,又快又方便。


2 Maven使用体验

maven网站 下载maven2,解压缩

配置环境变量:maven_home、path

cmd-> mvn --version 检查是否安装成功 [显示版本号,则说明安装成功]

配置,Maven的配置分为三个层次:
- pom.xml: 针对某个项目的配置
- Installation:
- User: 针对某个用户的配置
我们首先配置主要是user级别的,主要包括两点:设置本地的资源库和代理服务器[如果需要的话] 在%maven_home%/conf/setting.xml中配置:
       <localRepository>d:/repo</localRepository>
   
建立新的项目
mvn archetype:create -DgroupId=com.mycompany.app -DartifactId=my-app
首先,程序会从远程下载必要的jar包到你的localRepository,即我们刚刚设置的[d:/repo]
然后,会在当前目录下面生成my-app文件夹,包括简单的包结构[java,test]和一个HelloWorld程序及测试,以及pom.xml文件。
注意:pom.xml contains the Project Object Model (POM) for this project.The POM is the basic unit of work in Maven。

编译
mvn compile
第一次运行会下载很多jar包,而且机器负荷会很重。运行这个命令需要在pom.xml相同目录下面, 这个编译只编译主程序,不会编译test下面的程序。
如果需要单独编译test,请运行:
mvn test-compile
compile之后会生成target文件夹,主程序编译在classes下面,测试程序放在test-classes下

测试
mvn test
会自动先编译再运行测试

打包
mvn package
打包之前会进行编译,测试

安装
mvn install
会将package之后的jar包copy到
<local-repository>/com/mycompany/app/my-app/1.0-SNAPSHOT/my-app-1.0-SNAPSHOT.jar

其他
mvn site
注意,还可以:
deploy site
在pom.xml中加入
<distributionManagement>
    <site>
      <id> website </id>
      < url> scp://www.mycompany.com/www/docs/project/ </url>
    </site>
</distributionManagement>
当然你需要设置server
mvn site-deploymvn cleanmvn idea:idea [为IDE工具idea生成项目文件]

Resource
${basedir}/src/main/resources都会编译到jar文件中,而且该目录下的内容将直接位于jar文件的顶部。
测试用资源文件-> ${basedir}/src/test/resources,引用时如下例:
InputStream is = getClass().getResourceAsStream( "/test.properties" );
文件位于 ${basedir}/src/test/resources/test.properties。

如何filter我们的资源文件
   < build >
     < resources >
       < resource >
         < directory > src/main/resources </ directory >
         < filtering > true </ filtering >
       </ resource >
     </ resources >
   </ build >
因为原来默认的filter为false所以要加上上面的代码
eg:我们在src/main/resources下面建立application.properties文件
# application.properties application.name=${pom.name} application.version=${pom.version}
运行:mvn process-resources 在target/classes下面的application.properties结果为:
# application.properties application.name=Maven Quick Start Archetype application.version=1.0-SNAPSHOT
这就是所谓的filter。当然filter还可以用其他的外部文件,不一定来自pom.xml[ ${pom.name} ]以及setting.xml[ ${settings.localRepository }]
e.g src/main/filters/filter.properties:
# filter.properties my.filter.value=hello!
pom.xml:
< build >
     < filters >
       < filter > src/main/filters/filter.properties </ filter >
     </ filters >
     < resources >
       < resource >
         < directory > src/main/resources </ directory >
         < filtering > true </ filtering >
       </ resource >
     </ resources >
   </ build >
# application.properties
application.name=${pom.name}application.version=${pom.version}message=${my.filter.value}
这样在运行mvn process-resources 会得到类似的效果,当然我们也可以直接在pom.xml中定义:
  < build >
     < resources >
       < resource >
         < directory > src/main/resources </ directory >
         < filtering > true </ filtering >
       </ resource >
     </ resources >
   </ build >
   < properties >
     < my .filter.value > hello </ my.filter.value >
   </ properties >
效果同样,这样就不需要外部文件了。另外filter还可以来自系统设置以及可以自定义:
# application.propertiesjava.version=${java.version}command.line.prop=${command.line.prop}

jar包依赖
我们在mvn install后在local repo中生成的jar包也可以被其他项目所引用
<dependency>
      <groupId>com.mycompany.app</groupId>
      <artifactId>my-app</artifactId>
      <version>1.0-SNAPSHOT</version>
      <scope>compile</scope>
</dependency>
注意scope,这里是compile,如果使用junit,scope是test。
举例说明:如果我们的project需要用到log4j包,那么我们可以 先google--"site: www.ibiblio.org maven2 log4j"。Index of /maven2/log4j/log4j 下面有maven-metadata.xml 描述了groupId,artifactId,version等等。获取了这些信息之后,你 就可以在pom.xml中添加依赖
<dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.12</version>
      <scope>compile</scope>
</dependency>

如何发布我的jar包到我的remote repository
你需要在setting.xml中间设置server:
<servers>
    <server>
      <id>mycompany-repository</id>
      <username>jvanzyl</username>
      <!-- Default value is ~/.ssh/id_dsa -->
     <privateKey>/path/to/identity</privateKey>
     <passphrase>my_key_passphrase</passphrase>
    </server>
</servers>
然后在pom.xml中设置远程url:
<distributionManagement>
    <repository>
      <id>mycompany-repository</id>
      <name>MyCompany Repository</name>
     <url>scp://repository.mycompany.com/repository/maven2</url>
    </repository>
</distributionManagement>


3 Maven Eclipse插件
你可以从 http://m2eclipse.codehaus.orgupdate安装Maven2的Eclipse插件,具体 安装步骤请看该网站提供的Flash Demo: http://m2eclipse.codehaus.org/Installing_Maven_2.0_plugin_for_Eclipse.html

该插件的使用请看该网站提供的Flash Demo: http://m2eclipse.codehaus.org/Maven_2.0_Plugin_for_Eclipse.html
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值