Monday, December 28, 2009

Maven|关于maven工具的配置和使用

关于maven工具的配置和使用 - 卫斯理 - 51Testing软件测试网 - Powered by X-Space

关于maven工具的配置和使用

上一篇 / 下一篇  2008-07-09 17:44:26 / 个人分类:项目管理

关于maven的配置和使用,网上有很多资料可供参考,这里是将我的使用心得以及配置中遇到的问题和疑惑整理了一下,希望对大家有所帮助。

1maven的配置

1)maven的配置必须建立在jdk1.4版本基础上,即必须先配置jdk环境。

2)maven无须安装,从网上下载后,直接解压到本地就可以了。

3)maven配置完毕后,用maven -version命令来检测是否安装成功。

2mavensettings.xml修改

1)、在<localrespository>...</localrespository>标签中设置本地的版本库路径,例如<localrespository>d:/repo</localrespository>

本地版本库用来存放你从远端版本库中下载的jar包。路径可以是空的文件夹,必须要存在。如果不设置,那么maven默认为.m2/respository的路径。

2)、如果机器能够上网,那么无须配置代理,如果须代理上网的话,必须配置<proxy>..</proxy>,例如:

    <proxy>
      <id>optional</id>
      <active>true</active>
      <protocol>http</protocol>
      <username></username>
      <password></password>
      <host></host>
      <port></port>
     nonProxyHosts>local.net,some.host.com</nonProxyHosts>
    </proxy>

3)、如果需要从局域网内访问本地服务器上的版本库,那么可以设置<mirror>…</mirror>,例如

  <mirror>

     <id>planetmirror.com</id>

     <name>test</name>

     <url>…. </url>

     <mirrorOf>central</mirrorOf>

   </mirror>

注意<url>…. </url>里填写你服务器的访问地址,这里地址可以用apache或者tomcat来做为你的中心版本库的应用。

<mirrorOf>central</mirrorOf>中必须写成central

3maven的使用

1)、建立项目框架

Maven archetype:generate

根据你的需求选择不同的选项,建立项目框架,比如默认值15表示建立纯JAR项目,18表示建立WEB项目。每个选项涉及到的JAR包都会不一样,建立成功后,maven会自动将你所需的JAR包和依赖文件按照maven的格式下载到你的本地版本库中,本地版本库路径就是你刚才设的<localrespository>...</localrespository>

项目groupId输入你组织得结构

Archename输入你的项目名

版本号你可以默认,也可以按照公司的规定来定

包结构名根据公司规定来定

注意:maven生成的项目框架只是比较粗略的,开发人员开需自己去完善,不过记住千万不能删除原有的框架中的东西。

项目建立成功后,会发现在该项目下生成pom.xml文件。

2)、常用命令

2.1Maven compile(编译)

2.2Maven test测试

2.3Maven package(打包)

注意:以上命令必须在项目下运行,打包命令会自动帮你运行编译和测试,没有问题后,方才帮你打包。打包的路径放在target文件夹下。

2.4Maven site(生成网站)

该命令的好处在于你配置的东西可以在该网站上一目了然的显示出来。

2.5Maven eclipse:eclipse(生成eclipse能够认识的格式)

如果你想让eclipse开发工具能够认可你的项目框架,必须使用该命令来转换,运行该命令后,会在该项目下自动生成.project.classpath两个文件。

该命令的还有一个好处在于,你配置了dependence后,可以通过该命令来下载jar包。

3)、修改pom.xml

该文件是专门管理项目的,与远程服务器沟通主要是通过该文件的配置。

3.1dependence的配置

你刚建立的项目,只包含一个junitjar包,如果你想增加新的jar包,只能通过<dependence>..</dependence>标签里添加,然后用maven eclipse:eclipse命令帮你下载。Dependence的输写格式见下:

       <dependency>

     <groupId>javax.activation</groupId>

     <artifactId>activation</artifactId>

     <version>1.1</version>

</dependency>

注意格式必须符合maven的包结构关系才能正确下载。如果不是很清楚,可以到远端版本库参考。

此外,上述方法是手动添加法,你可以通过eclipse上的maven插件来自动添加。

如果远程版本库都没有的jar包,只能自己从网上下载后,按照maven的包结构格式,手动添加到本地的中心版本库里。

3.2、项目组织的配置

   <organization>

             <name>公司名称</name>

             <url>公司网址</url>

      </organization>

3.3、项目组成员的配置

      <developers>

             <developer>

                    <id>3000</id>

                    <name>name</name>

                    <email>…</email>

                    <url>….</url>

                    <organization>….</organization>

                    <organizationUrl>….</organizationUrl>

                    <roles>

                           <role>……</role>

                    </roles>

                    <timezone>-6</timezone>

             </developer>

   </developers>

3.4、持续集成管理的配置

<ciManagement>

             <system>continuum</system>

             <url>http://服务器IP:8081/continuum</url>

             <notifiers>

                    <notifier>

                           <type>mail</type>

                           <sendOnError>true</sendOnError>

                           <sendOnFailure>true</sendOnFailure>

                           <sendOnSuccess>false</sendOnSuccess>

                           <sendOnWarning>false</sendOnWarning>

                           <configuration>

                                  <address>。。。。。。</address>

                           </configuration>

                    </notifier>

             </notifiers>

      </ciManagement>

配置持续集成管理的方法是下载apache-continuum-1.1软件,然后无需配置直接运行bin\windows-x86-32\run.bat命令,启动成功后,输入http://服务器IP:8081/continuum地址,输入用户名和密码就可以。

配置持续集成管理的好处在于能够按照你的计划帮你从版本控制工具中checkout来编译和打包。该功能必须与<scm>…..</scm>标签配合起来使用。

3.5、版本控制工具的配置

我们用的是CVS

   <scm>

             <connection>

                    scm:cvs:pserver:username@服务器IP:/版本库文件夹:项目名

             </connection>

      </scm>

3.6、本地版本库伺服器的配置

我们采用artifactory软件工具,好处在于当开发人员无法从本地中心版本库中取得所需的jar包时,maven会自动向artifactory来请求jar包,从而杜绝本地中心版本库不全造成的开发人员无法获得资源的弊端。本地中心版本库的配置在前面的settings.xml<mirror>...</mirror>中配置。参照前面。

 

artifactory下载后,无需配置直接运行bin文件夹下的artifactory.bat,正常启动后,在IE浏览器中输入http://服务器地址:port/artifactory,输入adminpassword后,成功登陆后就可以了。

注意:artifactory必须安装在能够上网的机器上,如果需要设置代理上网的话,必须在/etc/artifactory.config.xml增加代理配置,例如:

   <proxies>

       <proxy>

           <key>unused-proxy</key>

           <host>代理IP</host>

           <port>端口号</port>

           <username>用户名</username>

           <password>密码</password>

           <domain>你服务器的名称</domain>

       </proxy>

</proxies>

 

以上配置完毕后,在pom.xml中加入如下的配置,这样本地再向中心版本库请求jar包时,无法获得时,maven 会自动向artifactory请求。

  •     <repositories>
            
    <repository>
                
    <id>artifactory</id>
                
    <name>your local artifactory</name>
                
    <url>http://localhost:8081/artifactory/repo</url>
            </
    repository>
        </
    repositories>

        
    <pluginRepositories>
            
    <pluginRepository>
                
    <id>artifactory</id>
                
    <name>your local artifactory</name>
                
    <url

Artifactory|Going Through Proxies - Artifactory

Going Through Proxies - Artifactory-20 - Confluence

Overview

In a corporate environment it is often required that, in order to access remote resources, you need to go through a proxy server. Artifactory supports both regular network proxies and NTLM proxies.

Using a Proxy

To use a proxy you first need to create a proxy definition via Admin:Configuration:Proxy.
If you do not need certain fields (e.g. if you are not using and NTLM proxy) simply leave them blank.

Then, to use the proxy with a remote repository, select in in the configuration panel for that repository.

Friday, December 25, 2009

Maven|Using the Maven Help Plugin

Maven Book: 2.8. Using the Maven Help Plugin

2.8. Using the Maven Help Plugin

Throughout the book, we will be introducing Maven plugins, talking about Maven Project Object Model (POM) files, settings files, and profiles. There are going to be times when you need a tool to help you make sense of some of the models that Maven is using and what goals are available on a specific plugin. The Maven Help plugin allows you to list active Maven profiles, display an effective POM, print the effective settings, or list the attributes of a Maven plugin.

Note

For a conceptual overview of the POM and plugins see Chapter 3, A Simple Maven Project.

The Maven Help plugin has four goals. The first three goals—active-profiles, effective-pom, and effective-settings—describe a particular project and must be run in the base directory of a project. The last goal—describe—is slightly more complex, showing you information about a plugin or a plugin goal. The following commands provide some general information about the four goals:

help:active-profiles

Lists the profiles (project, user, global) which are active for the build.

help:effective-pom

Displays the effective POM for the current build, with the active profiles factored in.

help:effective-settings

Prints out the calculated settings for the project, given any profile enhancement and the inheritance of the global settings into the user-level settings.

help:describe

Describes the attributes of a plugin. This need not run under an existing project directory. You must at least give the groupId and artifactId of the plugin you wish to describe.

2.8.1. Describing a Maven Plugin

Once you start using Maven, you'll spend most of your time trying to get more information about Maven Plugins: How do plugins work? What are the configuration parameters? What are the goals? The help:describe goal is something you'll be using very frequently to retrieve this information. With the plugin parameter you can specify a plugin you wish to investigate, passing in either the plugin prefix (e.g. maven-help-plugin as help) or the groupId:artifact[:version], where version is optional. For example, the following command uses the Help plugin's describe goal to print out information about the Maven Help plugin.

$ mvn help:describe -Dplugin=help ... Group Id:  org.apache.maven.plugins Artifact Id: maven-help-plugin Version:     2.0.1 Goal Prefix: help Description:  The Maven Help plugin provides goals aimed at helping to make sense out of     the build environment. It includes the ability to view the effective     POM and settings files, after inheritance and active profiles     have been applied, as well as a describe a particular plugin goal to give      usage information. ... 

Executing the describe goal with the plugin parameter printed out the Maven coordinates for the plugin, the goal prefix, and a brief description of the plugin. While this information is helpful, you'll usually be looking for more detail than this. If you want the Help plugin to print a full list of goals with parameters, execute the help:describe goal with the parameter full as follows:

$ mvn help:describe -Dplugin=help -Dfull ... Group Id:  org.apache.maven.plugins Artifact Id: maven-help-plugin Version:     2.0.1 Goal Prefix: help Description:  The Maven Help plugin provides goals aimed at helping to make sense out of     the build environment. It includes the ability to view the effective     POM and settings files, after inheritance and active profiles     have been applied, as well as a describe a particular plugin goal to      give usage information.  Mojos:  =============================================== Goal: 'active-profiles' =============================================== Description:  Lists the profiles which are currently active for this build.  Implementation: org.apache.maven.plugins.help.ActiveProfilesMojo Language: java  Parameters: -----------------------------------------------  [0] Name: output Type: java.io.File Required: false Directly editable: true Description:  This is an optional parameter for a file destination for the output of  this mojo...the listing of active profiles per project.  -----------------------------------------------  [1] Name: projects Type: java.util.List Required: true Directly editable: false Description:  This is the list of projects currently slated to be built by Maven.  -----------------------------------------------  This mojo doesn't have any component requirements. ===============================================  ... removed the other goals ... 

This option is great for discovering all of a plugin's goals as well as their parameters. But sometimes this is far more information than necessary. To get information about a single goal, set the mojo parameter as well as the plugin parameter. The following command lists all of the information about the Compiler plugin's compile goal.

$ mvn help:describe -Dplugin=compiler -Dmojo=compile -Dfull

Note

What? A Mojo? In Maven, a Plugin goal is known as a "Mojo".

Thursday, December 24, 2009

Maven|使用nexus替代artifactory作为maven私服 - run after my dream - BlogJava - Sent using Google Toolbar

初学maven(3)-使用nexus替代artifactory作为maven私服 - run after my dream - BlogJava

初学maven(3)-使用nexus替代artifactory作为maven私服

    之前看到过一些Nexus的介绍,由于刚开始接触maven时使用的私服是artifactory,因此没有太在意。今天想着既然Nexus能有胆量出来混,应该有点真本事才是,看了一下nexus的安装介绍,挺简单的,试试无妨。因此装上小试了一下,结果喜出望外,nexus的表现非常不错,尤其是在开启远程索引之后,简直太方便了。

    于是决定放弃artifactory改而使用nexus作为自己的maven私服。恩,惭愧,颇有点喜新厌旧的味道,artifactory才装上来没有几天,就惨遭抛弃......

    整理了一下,全过程记录如下:

1. 首先下载Nexus
    从官网http://nexus.sonatype.org/download.html下载下载最新版本,因为是在windows上安装,因此下载的是zip版本,大小大概是16m。
   
2. 安装
    简单解压缩下载的zip包到安装目录就可以了。
    可执行文件在%nexus安装目录%\nexus-webapp-1.0.0\binjsw\windows-x86-32下:
        InstallNexus.bat/UninstallNexus.bat是安装/卸载nexus为windows service,如果需要设置nexus为开机自动启动就可以安装为windows service然后设置启动方式为自动。
        Nexus.bat是直接在命令行中启动Nexus,如果不想安装Nexus为windows service,可以用这个文件来手工控制Nexus的启动退出。
       
       
3. 配置nexus

    首先登录,默认地址http://localhost:8081/nexus/,默认用户名密码为admin/admin123.
   
    最重要的一件事情就是开启远程索引下载,索引这个功能实在是太好用了。
   
    nexus默认是关闭远程索引下载功能的,主要是担心会造成对服务器的巨大负担,需要我们手工开启。
   
    开启的方式:
        点击Administration菜单下面的Repositories,将这三个仓库Apache Snapshots,Codehaus Snapshots,Maven Central的Download Remote Indexes修改为true。然后在这三个仓库上分别右键,选择Re-index,这样Nexus就会去下载远程的索引文件。
       
4. 配置maven
    要让maven使用nexus作为私服,需要做一些设置,使用和原来设置artifactory相似的方法。修改~/.m2/settings.xml.
   
    增加nexus的profile:

    <profile>
      
<id>nexus</id>
      
<repositories>
        
<repository>
            
<id>nexus</id>
            
<name>local private nexus</name>
            
<url>http://localhost:8081/nexus/content/groups/public</url>
            
<releases><enabled>true</enabled></releases>
            
<snapshots><enabled>false</enabled></snapshots>
        
</repository>
        
<repository>
            
<id>nexus</id>
            
<name>local private nexus</name>
            
<url>http://localhost:8081/nexus/content/groups/public-snapshots</url>
            
<releases><enabled>false</enabled></releases>
            
<snapshots><enabled>true</enabled></snapshots>
        
</repository>
      
</repositories>
      
<pluginRepositories>
        
<pluginRepository>
            
<id>nexus</id>
            
<name>local private nexus</name>
            
<url>http://localhost:8081/nexus/content/groups/public</url>
            
<releases><enabled>true</enabled></releases>
            
<snapshots><enabled>false</enabled></snapshots>
        
</pluginRepository>
        
<pluginRepository>
            
<id>nexus</id>
            
<name>local private nexus</name>
            
<url>http://localhost:8081/nexus/content/groups/public-snapshots</url>
            
<releases><enabled>false</enabled></releases>
            
<snapshots><enabled>true</enabled></snapshots>
        
</pluginRepository>
       
</pluginRepositories>
    
</profile>
 
    修改activeProfiles为:
      <activeProfiles>
        
<activeProfile>nexus</activeProfile>
      
</activeProfiles>
     
5. 为nexus增加Artifact
    有些特殊的Artifact无法从maven官网仓库中下载,比如sun的一些包,只好自己自行下载后添加到私服中。
    在nexus中我选择将这些Artifact上传到默认安装就存在的仓库3rd Party中,右击仓库名,选择Upload Artifact。
   
6. 在eclipse中使用索引功能
    原来试过,使用artifactory私服也可以使用Artifact的索引功能,但是由于不知道怎么设置远程仓库的index,我只会设置
    当前artifactory私服已有的Artifact的索引,对于还没有导入到artifactory私服的Artifact就没有办法索引了,很不方便,
    毕竟刚开始使用maven时,所有用到的Artifact都是本地和私服没有而需要到远程仓库取的。
   
    nexus中可以很方便的得到远程仓库的Artifact的索引,在上面“3. 配置nexus”就介绍过。下面介绍如何在eclispe里面
    设置和使用索引功能:
    1) 打开Maven Indexes 的eclispe view
        在eclispe中选择window -> show view -> other ... -> Maven -> Maven Indexes
    2) 添加nexus的index
        右键菜单中选"add index", 在弹出的"Add Respository index"窗口中填入:
            Repository URL: http://localhost:8081/nexus/content/groups/public
            Repository Id: nexus
            Index Update URL: 放空,暂时还不知道该怎么填
        加入后eclispe会自动load一次index信息,然后就可以在新加入的index下可以拉出极大数量的Artifact信息。
    3) 测试一下使用
        找个pom.xml文件,右键 -> Add Dependency, 然后填入一个关键词,比如我填入mina,马上填出和mina相关的一些
        选择,我找到apache mina,双击最新一个版本。会自动在pom.xml文件中增加以下内容:

        <dependency>
            
<groupId>org.apache.directory.mina</groupId>
            
<artifactId>mina-core</artifactId>
            
<version>0.9.5</version>
        
</dependency>

        然后Maven自动下载jar包,再将jar包加入项目的build path,全程自动化处理,真是爽啊。

7. 为nexus增加新的proxy  repository
        方法很简单,administration -> Repositories -> add -> proxy,填写后保存即可。但是要注意,nexus不会自动将新加入的repository添加到group中,而我们一般喜欢直接使用默认的"public repository" group, 比如前面我在maven的profile中就只设置了这一个URL: http://localhost:8081/nexus/content/groups/public。因此需要手工修改"public repository" group的设置,将刚才添加的proxy  repository加到组中。
        推荐的repository有:
                1) jboss         http://repository.jboss.com/maven2/
                2) sun            http://download.java.net/maven/2/
                3)k-int           http://developer.k-int.com/maven2/
                        加入这个纯粹是因为它有sun的jmxri/jmxtools这些Artifact,强烈鄙视sun,自己的官方repository居然没有。
                4)sonatype        http://repository.sonatype.org/content/groups/public/
8. 总结
    很明显,nexus无论是在界面,功能,操作上,都比artifactory强大的多。
    因此推荐大家使用nexus替代artifactory作为maven私服。
   
updates:
1.  2008.11.28 
由于公司升级操作系统,告别老旧不堪的windows2000升级到vista,因此重新安装了nexus. 新版本的nexus似乎增加了不少小的功能比如对remote index的支持,具体没有深究,不过能不断更新实在是很令人欣慰。以后就打算用nexus了。

2. 2009.10.15
    一年来陆续发现了一些比较不错的maven仓库
    1) fedora.is    
        http://fedora.is/maven/
    2) ibiblio
        http://mirrors.ibiblio.org/pub/mirrors/maven2/
        这个是ivy的官网,东西比较多
    3) rothamsted
        http://ondex.rothamsted.bbsrc.ac.uk/nexus/content/repositories/releases/
        http://ondex.rothamsted.bbsrc.ac.uk/nexus/content/repositories/wso2/
        有一些比较偏门的东西

Wednesday, December 23, 2009

Ivy|Ant+Ivy快速起步

对Maven感到头疼的同学有救了——Ant+Ivy快速起步 - 企业应用 - Java - JavaEye论坛

有了Ivy的帮忙,我们不需要为了一个库依赖管理而舍弃Ant去学那个难搞的Maven了。
基本配置步骤如下:
1、copy Ivy插件(见附件)到ant_home/lib下;
2、在项目根目录下新建ivysettings.xml
3、在项目根目录下新建ivy.xml,内容根据项目需要来;
4、修改你原来的build.xml,如下:
Java代码
  1. 增加ivy需要的属性:  
  2. <property name="publish.version" value="0.1" />  
  3. <property name="ivy.report.todir" value="build" />  
  4. <property name="repository.dir" value="d:/Local_Repository" />  
  5.   
  6. 初始化ivy:  
  7. <ivy:settings file="ivysettings.xml" />  
  8.   
  9. 添加resolve target,用于下载依赖包:  
  10. <target name="resolve" description="--> resolve and retrieve dependencies with ivy">  
  11.         <ivy:resolve file="ivy.xml" conf="*" />  
  12.         <ivy:retrieve pattern="${lib.dir}/[conf]/[artifact]-[revision].[ext]" />  
  13. </target>  
  14.   
  15. 让原来的compile依赖于resolve:  
  16. <target name="compile" depends="resolve"  
  17.   
  18. 添加publish target,这个不是必须的:  
  19. <target name="publish" depends="jar" description="publish">  
  20.         <ivy:publish resolver="local" pubrevision="${publish.version}" overwrite="true">  
  21.             <artifacts pattern="dist/[artifact].[ext]" />  
  22.         </ivy:publish>  
  23.         <echo message="project ${ant.project.name} released with version ${publish.version}" />  
  24. </target>  
  25.   
  26. 添加report target用于生产漂亮的依赖报告,当然这个也不是必须的:  
  27. <target name="report" depends="resolve" description="--> resolve and retrieve dependencies with ivy">  
  28.         <ivy:report />  
  29. </target>  
增加ivy需要的属性: <property name="publish.version" value="0.1" /> <property name="ivy.report.todir" value="build" /> <property name="repository.dir" value="d:/Local_Repository" />  初始化ivy: <ivy:settings file="ivysettings.xml" />  添加resolve target,用于下载依赖包: <target name="resolve" description="--> resolve and retrieve dependencies with ivy"> 		<ivy:resolve file="ivy.xml" conf="*" /> 		<ivy:retrieve pattern="${lib.dir}/[conf]/[artifact]-[revision].[ext]" /> </target>  让原来的compile依赖于resolve: <target name="compile" depends="resolve"  添加publish target,这个不是必须的: <target name="publish" depends="jar" description="publish"> 		<ivy:publish resolver="local" pubrevision="${publish.version}" overwrite="true"> 			<artifacts pattern="dist/[artifact].[ext]" /> 		</ivy:publish> 		<echo message="project ${ant.project.name} released with version ${publish.version}" /> </target>  添加report target用于生产漂亮的依赖报告,当然这个也不是必须的: <target name="report" depends="resolve" description="--> resolve and retrieve dependencies with ivy"> 		<ivy:report /> </target> 

完整的build.xml示例见http://code.google.com/p/smartpagination/source/browse/trunk/build.xml

Over!

至此,你已经为蚂蚁插上了Ivy的翅膀,下面的工作只是锦上添花而已——在Eclipse配置Ivy,这个工作的作用是把ivy.xml变成classpath的一部分,使得我们只需要维护ivy.xml不需要维护.classpath文件。
配置步骤:
1、Window->preference->ant->RunTime->Classpath->Ant Home Entries,
右边Add External Jars,添加org.apache.ivy_2.1.0.cr1_20090319213629.jar。
2、安装Ivy插件:Help->Install new software->add,
Name: IvyDE,Location: http://www.apache.org/dist/ant/ivyde/updatesite
安装成功后重启eclipse;
3、重启eclipse后,Window->preference->ivy->settings
Ivy settings path设为d:/workspace/ivysettings.xml(这个值取决于你的环境)

至此,Eclipse的ivy插件配置好了,然后就可以为你的项目classpath添加ivy依赖了:
选中项目->右键 属性->Java Build Path->Libraries->Add Library...->IvyIDE Managed Dependencies->finish->OK
然后神奇的事情就出现了——虽然你一个jar包也没下载,只是在ivy.xml里面声明了一下,但是你的项目已经可以编译通过了,就好像那些第三方类库已经在你本地了一样。

Tuesday, December 22, 2009

ANT|ant-contrib根据判定条件执行不同任务的实例(以操作系统类型为判定条件举例)

关于ANT构建应用时,根据判定条件执行不同任务的实例(以操作系统类型为判定条件举例) - 心无痕的博客 - BlogJava

关于ANT构建应用时,根据判定条件执行不同任务的实例(以操作系统类型为判定条件举例)

最近在一个项目(湖北质检),要求搭建一个专门的版本发布服务器,为了将源代码构建并在服务器上测试,而选用ANT来实现。但是,在执行起动Tomcat服务时会有二个起动脚本(startup.sh与startup.bat),这二个脚本分别用于Unix与Windows操作系统;因此,为了适应不同平台的构建,需要根据不同OS来执行不同的脚本。但是,ANT本身还没有条件判断的功能,所以,此处需要借助Ant-Contrib包来实现。具体如下:
一:)下载apache-ant-版本号-bin.zip文件(此处是apache-ant-1.7.0-bin.zip):
               下载apache-ant-1.7.0-bin.zip
二:)下载ant-contrib-版本号.jar文件(此处是ant-contrib-1.0b3.jar):
              下载ant-contrib-1.0b3.jar
三:)解压ANT安装文件(apache-ant-1.7.0-bin.zip)到某一目录,如:

            D:\Program Files\Apache_ANT_1.7.0

四:)配置环境变量(path与classpath):
            ANT_HOME=D:\Program Files\Apache_ANT_1.7.0

            path=%path%;%ANT_HOME%\bin;
            classpath=%ANT_HOME%\lib;
五:)安装ant-contrib-1.0b3.jar,下面是ant-contrib-1.0b3.jar解压包中的指南对安装的说明,如下:
            

Installation

First you must install Apache Ant itself, most of the Ant-Contrib tasks require Ant 1.5 or higher to work properly, however, there are some tasks, specifically <for> which require Ant 1.6. You can download Ant from Apache.

Then you need the Ant-Contrib tasks themselves. As there is no release of these tasks yet, you have to build them from sources. Fortunately this is easy, check out the sources (grab the ant-contrib module from CVS), change into the source directory of ant-contrib and type ant. After Ant has completed, you'll find ant-contrib-version.jar in the lib subdirectory.

You now have the choice:

  1. Copy ant-contrib-version.jar to the lib directory of your Ant installation, or on your CLASSPATH environment variable. If you want to use one of the tasks in your project, add the line
    <taskdef resource="net/sf/antcontrib/antlib.xml"/>     
    to your build file.

  2. Keep ant-contrib-version.jar in a separate location. You now have to tell Ant explicitly where to find it (say in /usr/share/java/lib):
    <taskdef resource="net/sf/antcontrib/antlib.xml">     <classpath>     <pathelement location="/usr/share/java/lib/ant-contrib-version.jar"/>     </classpath>     </taskdef>     
  3. If you would like to use run with Ant Version 1.5 you must use the the .properties file instead. Keep in mind that some tasks will not be available to you , such as the <for> task:
    <taskdef resource="net/sf/antcontrib/antcontrib.properties">     <classpath>     <pathelement location="/usr/share/java/lib/ant-contrib-version.jar"/>     </classpath>     </taskdef>
六:)现在可以使用ant-contrib的功能来添加到ANT构建文件中,下面是本项目(湖北质检)的构建文件,如下(注意红色部分的条件定义与判断的执行):
<?xml version="1.0" encoding="UTF-8" ?> <project name="QCSystem" default="startWebApplication" basedir=".">
 <description>湖北质检ANT构建与Tomcat应用起动配置文件,起动应用时根据不同的操作系统调用不同的Tomcat起运脚本(startup.sh或startup.bat)!</description>    <!-- ********** 构件文件相关属性 *********** -->  <!-- 系统环境变量 -->  <property environment="sys-env"/> 
 <!-- 通用路径或文件夹名称 -->  <property name="srcDir" location="src"/>  <property name="webAppDir" location="webapp"/>
 <property name="webInfName" value="WEB-INF"/>  <property name="destDirName" value="classes"/>
 <property name="tomcatCommonName" value="common"/>  
 <!-- 添加"Ant-Contrib"对ANT构建文件的支持 -->  
 <taskdef resource="net/sf/antcontrib/antcontrib.properties">   
    <classpath>    
        <pathelement location="${sys-env.ANT_HOME}/Ant-Contrib/ant-contrib-1.0b3.jar"/>  
    </classpath>  
 </taskdef>


 <!-- 初始化操作系统判断条件 -->  
<property name="winOS" value="win"/>
 <property name="unixOS" value="unix"/>
 <target name="init">   
    <echo message="初始化操作系统判断条件[开始]..." />   
    <condition property="OSType" value="${winOS}">    
        <os family="Windows"/>   
    </condition>
    <condition property="OSType" value="${unixOS}">
        <os family="UNIX"/>
    </condition>   
    <echo message="初始化操作系统判断条件[结束]..." />  
  </target>

 <!-- 第三方类库-->  <path id="compileLibFiles">   <fileset dir="${webAppDir}/${webInfName}/lib">       <include name="**/*.jar"/>   </fileset>
  <fileset dir="${sys-env.CATALINA_HOME}/${tomcatCommonName}/lib">    <include name="**/*.jar"/>   </fileset>  </path>  
 <!-- 编译工程 -->  <target name="compile">   <echo message="湖北质检项目编译[开始] ..."/>   <javac srcdir="${srcDir}" debug="on" destdir="${webAppDir}/${webInfName}/${destDirName}" includes="**/*.java">    <classpath refid="compileLibFiles"/>   </javac>
  <!-- 拷贝配置文件到编译目录 -->   <copy todir="${webAppDir}/${webInfName}/${destDirName}">    <fileset dir="${srcDir}" excludes="**/*.java"/>   </copy>   <echo message="湖北质检项目编译[结束] ..."/>  </target>
 <!-- 根据不同的操作系统调用不同的Tomcat起动程序(Windows操作系统:startup.bat  Unix操作系统:startup.sh) -->  <target name="startWebApplication" depends="init, compile">   <echo message="起动湖北质检应用[开始] ..."/>   <if>    
    <equals arg1="${OSType}" arg2="${winOS}"/>    
    <!-- 下边这种方式直接判断操作系统也可以 -->    
    <!--os family="WINDOWS"/-->    
    <then>     
        <exec dir="${sys-env.CATALINA_HOME}/bin" executable="${sys-env.CATALINA_HOME}/bin/startup.bat"/>
    </then>    
    <else>     
        <exec dir="${sys-env.CATALINA_HOME}/bin" executable="${sys-env.CATALINA_HOME}/bin/startup.sh"/>    
    </else>   
  </if>
  
  <echo message="起动湖北质检应用[结束] ..."/>  </target>
</project>

Maven2|常见问题

Maven2常见问题_苹果开发文档

Maven2常见问题
2009-11-23 09:32
1.eclipse的maven插件
http://m2eclipse.sonatype.org/update/

2.本地repository服务器
http://repo2.maven.org/maven2/中所需要的库文件下载到本地repository服务器上供项目组使用,
而不需要每人都从maven2的官方网站去更新所依赖的库文件.
官方站点: http://archiva.apache.org/
下载: http://apache.mirror.phpchina.com/archiva/binaries/apache-archiva-1.1.3-bin.zip
解压: D:\apache-archiva-1.1.3
运行archiva: D:\apache-archiva-1.1.3\bin>archiva console
访问: http://localhost:8080/archiva
设定管理员账号密码,再重新登录即可.
访问http://localhost:8080/archiva/admin/repositories.action即可看到本地repository
http://localhost:8080/archiva/repository/internal/
http://localhost:8080/archiva/repository/snapshots/
将该服务器增加入setting.xml中:

<repositories>
<repository>
<id>localhost</id>
<name>Repository locates at localhost</name>
<url>http://localhost:8080/archiva/repository/internal/</url>
<layout>default</layout>
<snapshotPolicy>always</snapshotPolicy>
</repository>
</repositories>

archiva也提供了上传jar文件到本地repository的功能

另外,Artifactory也提供了类似的功能.

3.设定构建参数
如:编译的JDK版本,字符集等.

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

4.发布jar文件到本地repository

mvn install:install-file  -Dfile=c:\myfirst.jar -DartifactId=myfirst
-DgroupId=com.mycompany -Dversion=1.0.0
-Dpackaging=jar -DgeneratePom=true -DcreateChecksum=true

5.发布jar文件到repository服务器
首先,到
http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
下载plink.exe和pscp.exe

然后,修改setting.xml:

<server>
<id>192.168.1.2</id>
<username>root</username>
<password>root</password>
<configuration>
<sshExecutable>C:/maven2/plink.exe</sshExecutable>
<scpExecutable>C:/maven2/pscp.exe</scpExecutable>
<sshArgs></sshArgs>
</configuration>
</server>

最后,上传到/var/www/html/maven2下面:

mvn deploy:deploy-file -Durl=scpexe://192.168.1.2/var/www/html/maven2
-DrepositoryId=192.168.1.2
-Dfile=c:/myfirst.jar
-DgroupId=com.mycompany
-DartifactId=myfirst
-Dversion=1.0.0
-Dpackaging=jar
-DgeneratePom=true
-DcreateChecksum=true

6. 容器提供依赖jar文件

<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.4</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency>