maven

简介:
maven2 
     相信maven1 大家都已 很熟悉了,具体maven能做什 ,就不 详细说 了。个人 得maven在 目中用的 是比 多的,公司内部,就不太清楚了。我以前的公司用 一段 时间 ,不 后来就没有下文了。
    与maven1 相比,maven2可算是几乎重写了,不
从速度来 说应该 更快。
    
主要的几个新特性包括:( 详细 参考 http://www.ibm.com/developerworks/cn/opensource/os-maven2/index.html
    1
. 更快、更 简单
        
速度方面可以比上 ant
    2
. 更少的配置文件
        
在的配置文件只剩下了 settings.xml pom.xml 了。
    
3.  Plugin 言更
        
始支持java,BeanShell和ant
    4.  提供了
的模版
        
点是最有帮助的,用 可以自己定 自己的 目模版了,就像用appfuse一 生成
    5. 生命周期的引入
         在Maven2中有了明确的生命周期概念,而且都提供与之
对应 的命令,使得 目构建更加清晰明了。
    
6.   新增 Dependency Scope    
         
点也比 重要,有些用于 test 的包,可以不用加入依
    7.  
传递 化依 管理
        
是最 方便的,可以省了很多配置。 如a 依  b,b  c    a 也会依  c 。但是也会 患,如版本冲突。不 maven  也已 到了,可以使用exclusions来排除相 的重

了那 多, 在切入正 始maven2 之旅:
首些下 需要的工具:
maven2: http://maven.apache.org/download.html 最主要的
maven-proxy:用来代理repository,使用本地
代替maven2的
            http://maven-proxy.codehaus.org/
continuum
:一个不 的持 整合工具,用于自 build 。支持ant,maven
http://maven.apache.org/continuum/
svn:版本控制工具相信都已
配置了。
maven  用于 eclipse 的插件  , maven 主站有下 ,不 的插件。当然 idea 也有相 的插件
最后, http ,服 器是必不可少的。用于内部 开发 使用。
可以使用 apache  ,或者 jetty  http://www.mortbay.org/

安装:
    
安装 maven2 简单 ,把下 来的 maven 包解 就行了。(目前我的配置都在 win2003 上, 没有 用于 linux ,所有所有的配置都 针对  windows). 增加相 m2_home=maven2 的安装目 ,不要忘了 java_home 的目 。另外在 path 中增加 % m2_home%\bin; 可以直接在命令行下面使用 mvn
其他工具的安装在后 的文章会介

始第一个 mvean2 目:
  mvn archetype:create -DgroupId=com.mycompany.app \
                   -DartifactId=my-app
  
简单 一下  groupId 相当于你的 组织 ,如同 org.springframework ,会 得本地路径  artifactId ,你主要的 jar 包名称,也就是你要打成的 jar  名称。
编译应
    mvn compile
        
编译 jave  文件
编译测试类 以及运行 测试类
    mvn test
       
运行 测试类
如果只想 编译 test
    mvn test-compile
打包和安装你的本地
打包:
    mvn package
安装:
    mvn install
web site
    mvn site
清除所有
    mvn clean
建相 ide 文件
    mvn idea:idea        
或者     mvn eclipse:eclipse

    
便 一下, maven2  是有生命周期 一概念的,也就是 如果你 package ,相 的以前 步骤 ,如 compile,test 等都会自 动执 行。
刚开 行会比 慢,需要从maven2 中下 所有的文件到本地。如果你的本地没有相 的依 包, 则每 次maven都会去 程下 ,所以配置一个 就比 重要了。
    
另外介 一下主要的参考 料:
    mavn2 
主站:主要的 pom settings.xml 参考
    Better Builds with Maven     http://www.mergere.com/m2book_download.jsp
    
,主要通 例子介 可惜都是E文的,花点 时间还 得的。
    下一个主
,会 一下maven2的主要配置。
 
 
maven  配置篇 之  settings.xml
    maven2  比起 maven1  ,需要配置的文件少多了,主要集中在 pom.xml settings.xml 中。
    
先来 说说 settings.xml settings.xml maven 相当于全局性的配置,用于所有的 目。在 maven2 中存在两个  settings.xml ,一个位于 maven2 的安装目 conf 下面,作 全局性配置。 团队设 置,保持一致的定 关键 ,所以 maven2/conf下面的settings.xml就作 为团队 共同的配置文件。保 所有的 团队 有相同的配置。当然 个成 ,都需要特殊的 自定 义设 置,如用 信息,所以另外一个settings.xml就作 本地配置。默 的位置 :${user.dir} /.m2/settings.xml目 中(${user.dir} 指windows 中的用 )。
    settings.xml基本
构如下:
    <settings 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/xsd/settings-1.0.0.xsd">
  <localRepository/>
  <interactiveMode/>
  <usePluginRegistry/>
  <offline/>
  <pluginGroups/>
  <servers/>
  <mirrors/>
  <proxies/>
  <profiles/>
  <activeProfiles/>
</settings>
简单 一下几个主要的配置因素:
localRepository表示本地
的保存位置,也就是maven2主要的jar保存位置,默 在${user.dir}/.m2/repository,如果需要另外 置,就 成其他的路径。
offline如果不想
编译 ,都去 程中心 ,那就 true 。当然前提是你已 了必 的依 包。
Servers
   在POM中的 distributionManagement元素定
开发库 。然而,特定的username和pwd不能使用于pom.xml,所以通 此配置来保存server信息
  <servers>
    <server>
      <id>server001</id>
      <username>my_login</username>
      <password>my_password</password>
      <privateKey>${usr.home}/.ssh/id_dsa</privateKey>
      <passphrase>some_passphrase</passphrase>
      <filePermissions>664</filePermissions>
      <directoryPermissions>775</directoryPermissions>
      <configuration></configuration>
    </server>
  </servers>
  • id:server id,用于匹配distributionManagementid,比重要。
  • username, password:用于登此服器的用名和密
  • privateKey, passphraseprivate key,以及passphrase
  • filePermissions, directoryPermissions:当文件或者目录创建后,需要使用访问。参照unix文件可,如664775
Mirrors  
表示 ,指定 像,用于增加其他
  <mirrors>
    <mirror>
      <id>planetmirror.com</id>
      <name>PlanetMirror Australia</name>
      <url>http://downloads.planetmirror.com/pub/maven2</url>
      <mirrorOf>central</mirrorOf>
    </mirror>
  </mirrors>
  • id,name:唯一的志,用于区别镜
  • url:像的url
  • mirrorOf:此像指向的服id
Proxies  
置,主要用于无法直接 访问 中心的 配置。
  
<proxies>
    <proxy>
      <id>myproxy</id>
      <active>true</active>
      <protocol>http</protocol>
      <host>proxy.somewhere.com</host>
      <port>8080</port>
      <username>proxyuser</username>
      <password>somepassword</password>
      <nonProxyHosts>*.google.com|ibiblio.org</nonProxyHosts>
    </proxy>
  </proxies>
  • id:代理的
  • active:是否激活代理
  • protocol, host, port:protocol://host:port 代理
  • username, password:用名和密
  • nonProxyHosts: 不需要代理的host
Profiles  
  
似于 pom.xml 中的 profile 元素,主要包括 activation,repositories,pluginRepositories  properties 元素
  
刚开 始接触的 候,可能会比 迷惑,其 实这 maven2 中比 较强 大的功能。 从字面上来 ,就是个性配置。
  
独定 profile 后,并不会生效,需要通 过满 足条件来激活。
 
repositories  pluginRepositories 
 
其他 开发库 和插件 开发库 团队 ,肯定有自己的 开发库 。可以通 此配置来定
 
如下的配置,定 了本地 开发库 ,用于 release  布。
    <repositories>
        <repository>
          <id>repo-local</id>
       <name>Internal 
开发库 </name>
       <url>http://192.168.0.2:8082/repo-local</url>
          <releases>
            <enabled>true</enabled>
            <updatePolicy>never</updatePolicy>
            <checksumPolicy>warn</checksumPolicy>
          </releases>
          <snapshots>
            <enabled>false</enabled>
          </snapshots>
          <layout>default</layout>
        </repository>
      </repositories>
      <pluginRepositories>
    <pluginRepository>
    <id>repo-local</id>
    <name>Internal 
开发库 </name>
    <url>http://192.168.0.2:8082/repo-local</url>
    <releases>
            <enabled>true</enabled>
            <updatePolicy>never</updatePolicy>
            <checksumPolicy>warn</checksumPolicy>
    </releases>
    <snapshots>
    <enabled>false</enabled>
    </snapshots>
    <layout>default</layout>
    </pluginRepository>
    </pluginRepositories>
releases, snapshots:
品的版本的 Release 或者 snapshot( 注: release snapshot 的区 release 一般是比 较稳 定的版本,而 snapshot 基本上不 定,只是作 快照)

properties
  maven 
properties placeholder ,如 ant properties
包括以下的 5 种类
1.         env.X ,返回当前的
2.         project.x: 返回 pom 中定 的元素 ,如 project.version
3.         settings.x :返回 settings.xml 中定 的元素
4.         java  属性:所有 经过 java.lang.System.getProperties() 返回的
5.         x :用 自己 定的
Activation  
  
用于激活此 profile
  <activation>
        <activeByDefault>false</activeByDefault>
        <jdk>1.5</jdk>
        <os>
          <name>Windows XP</name>
          <family>Windows</family>
          <arch>x86</arch>
          <version>5.1.2600</version>
        </os>
        <property>
          <name>mavenVersion</name>
          <value>2.0.3</value>
        </property>
        <file>
          <exists>${basedir}/file2.properties</exists>
          <missing>${basedir}/file1.properties</missing>
        </file>
      </activation>
  • jdk:如果匹配指定的jdk版本,将会激活
  • os:操作系
  • property:如果maven检测到相的属性
  • file: 用于判断文件是否存在或者不存在

除了使用 activation 来激活 profile ,同 可以通 activeProfiles 来激活
Active Profiles
表示激活的 profile, profile id 来指定。
  <activeProfiles>
    <activeProfile>env-test</activeProfile> 
指定的 profile id
  </activeProfiles>
 
 
 
maven  配置篇 之 pom.xml
     完了 settings.xml 配置,下来 一下 maven2 的主要配置 pom.xml
pom?
    
pom 为项 象模型。通 xml 表示maven 目,使用pom.xml来 实现 。主要描述了 目:包括配置文件; 开发 者需要遵循的 规则 ,缺陷管理系 组织 和licenses, 目的url, 目的依 性,以及其他所有的 目相 因素。
快速察看:
<project>
  <modelVersion>4.0.0</modelVersion>

  <!-- The Basics -->
  <groupId>...</groupId>
  <artifactId>...</artifactId>
  <version>...</version>
  <packaging>...</packaging>
  <dependencies>...</dependencies>
  <parent>...</parent>
  <dependencyManagement>...</dependencyManagement>
  <modules>...</modules>
  <properties>...</properties>

  <!-- Build Settings -->
  <build>...</build>
  <reporting>...</reporting>

  <!-- More Project Information -->
  <name>...</name>
  <description>...</description>
  <url>...</url>
  <inceptionYear>...</inceptionYear>
  <licenses>...</licenses>
  <organization>...</organization>
  <developers>...</developers>
  <contributors>...</contributors>

  <!-- Environment Settings -->
  <issueManagement>...</issueManagement>
  <ciManagement>...</ciManagement>
  <mailingLists>...</mailingLists> 
  <scm>...</scm>
  <prerequisites>...</prerequisites>
  <repositories>...</repositories>
  <pluginRepositories>...</pluginRepositories>
  <distributionManagement>...</distributionManagement>
  <profiles>...</profiles>
</project>

基本内容:
    POM
包括了所有的 目信息。
maven 

pom
了最小的 maven2 元素,允 groupId,artifactId,version 。所有需要的元素
  • groupId:目或者组织的唯一志,并且配置生成的路径也是由此生成,如org.codehaus.mojo生成的相路径/org/codehaus/mojo
  • artifactId: 目的通用名称
  • version:目的版本
  • packaging: 打包的机制,如pom, jar, maven-plugin, ejb, war, ear, rar, par
  • classifier: 
POM 系:  
主要 承,合成
  
赖关 系:
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.0</version>
      <type>jar</type>
      <scope>test</scope>
      <optional>true</optional>
    </dependency>
    ...
  </dependencies>
  • groupId, artifactId, version:描述了依目唯一
可以通 以下方式 行安装:
·    使用以下的命令安装:
·    mvn install:install-file –Dfile=non-maven-proj.jar –DgroupId=some.group –DartifactId=non-maven-proj –Dversion=1
·    建自己的 , 并配置,使用 deploy:deploy-file
·    置此依 围为 system ,定 一个系 路径。 不提倡。
  • type:的依赖产品包形式,如jarwar
  • scope:用于限制相的依,包括以下的几种变量:
·    compile  :默 ,用于 编译
·    provided 似于 编译 ,但支持你期待 jdk 或者容器提供, 似于 classpath
·    runtime: ,需要使用
·    test: 用于 test 务时 使用
·    system: 需要外在提供相 得元素。通 systemPath 来取得
  • systemPath: 用于范围为system。提供相的路径
  • optional: 注可,当目自身也是依赖时。用于连续赖时使用
    独占性     
   
外在告 maven 你只包括指定的 目,不包括相 的依 。此因素主要用于解决版本冲突 问题
  <dependencies>
    <dependency>
      <groupId>org.apache.maven</groupId>
      <artifactId>maven-embedder</artifactId>
      <version>2.0</version>
      <exclusions>
        <exclusion>
          <groupId>org.apache.maven</groupId>
          <artifactId>maven-core</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
表示 目maven-embedder需要 目maven-core,但我 不想引用maven-core


    
另一个 大的 化,maven 来的是 承。主要的 置:

<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>my-parent</artifactId>
  <version>2.0</version>
  <packaging>pom</packaging>
</project>
    packaging 
型,需要pom用于parent和合成多个 目。我 需要增加相 值给 父pom,用于子 承。 主要的元素如下:
  • 开发者和合作者
  • 插件列表
  • 表列表
  • 插件行使用相的匹配ids
  • 插件配置
  • 目配置
<project>
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>my-parent</artifactId>
    <version>2.0</version>
    <relativePath>../my-parent</relativePath>
  </parent>
  <artifactId>my-project</artifactId>
</project>
relativePath
可以不需要,但是用于指明 parent 的目 ,用于快速 查询

dependencyManagement

用于父 目配置共同的依 赖关 系,主要配置依 包相同因素,如版本, scope

合成(或者多个模
    
一个 目有多个模 ,也叫做多重模 ,或者合成 目。
如下的定
<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>my-parent</artifactId>
  <version>2.0</version>
  <modules>
    <module>my-project1<module>
    <module>my-project2<module>
  </modules>
</project>

build 

    
主要用于 编译设 置,包括两个主要的元素, build report
  build
    
主要分 两部分,基本元素和 展元素集合
注意:包括 build profile build
<project>
  <!-- "Project Build" contains more elements than just the BaseBuild set -->
  <build>...</build>
  <profiles>
    <profile>
      <!-- "Profile Build" contains a subset of "Project Build"s elements -->
      <build>...</build>
    </profile>
  </profiles>
</project>

基本元素
<build>
  <defaultGoal>install</defaultGoal>
  <directory>${basedir}/target</directory>
  <finalName>${artifactId}-${version}</finalName>
  <filters>
    <filter>filters/filter1.properties</filter>
  </filters>
  ...
</build>
  • defaultGoal: 的目或者段。如install
  • directory: 编译输出的目
  • finalName: 生成最后的文件的
  • filter: 义过滤,用于替的属性文件,使用maven定的属性。置所有placehold

(resources)  
    
目中需要指定的 源。如 spring 配置文件 ,log4j.properties
<project>
  <build>
    ...
    <resources>
      <resource>
        <targetPath>META-INF/plexus</targetPath>
        <filtering>false</filtering>
        <directory>${basedir}/src/main/plexus</directory>
        <includes>
          <include>configuration.xml</include>
        </includes>
        <excludes>
          <exclude>**/*.properties</exclude>
        </excludes>
      </resource>
    </resources>
    <testResources>
      ...
    </testResources>
    ...
  </build>
</project>
  • resources: resource的列表,用于包括所有的
  • targetPath: 指定目路径,用于放置源,用于build
  • filtering: 是否替换资源中的属性placehold
  • directory: 源所在的位置
  • includes: 式,包括那些
  • excludes: 排除的
  • testResources: 测试资源列表
插件  
  
build 行的插件,比 有用的部分,如使用 jdk 5.0 编译 等等
<project>
  <build>
    ...
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <version>2.0</version>
        <extensions>false</extensions>
        <inherited>true</inherited>
        <configuration>
          <classifier>test</classifier>
        </configuration>
        <dependencies>...</dependencies>
        <executions>...</executions>
      </plugin>
    </plugins>
  </build>
</project>
  • extensions: true or false,是否装插件展。默false
  • inherited: true or false,是否此插件配置将会用于poms,那些承于此的
  • configuration: 指定插件配置
  • dependencies: 插件需要依的包
  • executions: 用于配置execution,一个插件可以有多个目
如下:
    <plugin>
        <artifactId>maven-antrun-plugin</artifactId>

        <executions>
          <execution>
            <id>echodir</id>
            <goals>
              <goal>run</goal>
            </goals>
            <phase>verify</phase>
            <inherited>false</inherited>
            <configuration>
              <tasks>
                <echo>Build Dir: ${project.build.directory}</echo>
              </tasks>
            </configuration>
          </execution>
        </executions>
      </plugin>
  
明:
  • id:execution 的唯一
  • goals: 表示目
  • phase: 表示段,目将会在什么阶
  • inherited: 和上面的元素一false maven将会拒绝执子插件
  • configuration: 表示此行的配置属性

插件管理  
    pluginManagement
:插件管理以同 的方式包括插件元素,用于在特定的 目中配置。所有 承于此 目的子 目都能使用。主要定 插件的共同元素

展元素集合
主要包括以下的元素:
Directories
用于 置各 录结 构,如下:
  <build>
    <sourceDirectory>${basedir}/src/main/java</sourceDirectory>
    <scriptSourceDirectory>${basedir}/src/main/scripts</scriptSourceDirectory>
    <testSourceDirectory>${basedir}/src/test/java</testSourceDirectory>
    <outputDirectory>${basedir}/target/classes</outputDirectory>
    <testOutputDirectory>${basedir}/target/test-classes</testOutputDirectory>
    ...
  </build>

Extensions

表示需要 展的插件,必 包括 build 路径。

<project>
  <build>
    ...
    <extensions>
      <extension>
        <groupId>org.apache.maven.wagon</groupId>
        <artifactId>wagon-ftp</artifactId>
        <version>1.0-alpha-3</version>
      </extension>
    </extensions>
    ...
  </build>
</project>

Reporting
    
用于在 site 表。特定的 maven  插件能 出相 的定制和配置 表。
  <reporting>
    <plugins>
      <plugin>
        <outputDirectory>${basedir}/target/site</outputDirectory>
        <artifactId>maven-project-info-reports-plugin</artifactId>
        <reportSets>
          <reportSet></reportSet>
        </reportSets>
      </plugin>
    </plugins>
  </reporting>

Report Sets
    
用于配置不同的目 用于不同的
<reporting>
    <plugins>
      <plugin>
        ...
        <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>
    </plugins>
  </reporting>

更多的 目信息
name:
目除了 artifactId 外,可以定 多个名称
description: 
目描述
url: 
url
inceptionYear:
始年份

Licenses
<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
配置 组织 信息
  <organization>
    <name>Codehaus Mojo</name>
    <url>http://mojo.codehaus.org</url>
  </organization>

Developers
配置 开发 者信息
<developers>
    <developer>
      <id>eric</id>
      <name>Eric</name>
      <email>eredmond@codehaus.org</email>
      <url>http://eric.propellors.net</url>
      <organization>Codehaus</organization>
      <organizationUrl>http://mojo.codehaus.org</organizationUrl>
      <roles>
        <role>architect</role>
        <role>developer</role>
      </roles>
      <timezone>-6</timezone>
      <properties>
        <picUrl>http://tinyurl.com/prv4t</picUrl>
      </properties>
    </developer>
  </developers>

Contributors
  <contributors>
    <contributor>
      <name>Noelle</name>
      <email>some.name@gmail.com</email>
      <url>http://noellemarie.com</url>
      <organization>Noelle Marie</organization>
      <organizationUrl>http://noellemarie.com</organizationUrl>
      <roles>
        <role>tester</role>
      </roles>
      <timezone>-5</timezone>
      <properties>
        <gtalk>some.name@gmail.com</gtalk>
      </properties>
    </contributor>
  </contributors>



Issue Management
    
bug 跟踪系 ,如 bugzilla,testtrack,clearQuest
  <issueManagement>
    <system>Bugzilla</system>
    <url>http://127.0.0.1/bugzilla</url>
  </issueManagement>
Continuous Integration Management
连续 整合管理,基于 triggers 或者 timings
  <ciManagement>
    <system>continuum</system>
    <url>http://127.0.0.1:8080/continuum</url>
    <notifiers>
      <notifier>
        <type>mail</type>
        <sendOnError>true</sendOnError>
        <sendOnFailure>true</sendOnFailure>
        <sendOnSuccess>false</sendOnSuccess>
        <sendOnWarning>false</sendOnWarning>
        <configuration><address>continuum@127.0.0.1</address></configuration>
      </notifier>
    </notifiers>
  </ciManagement>

Mailing Lists
  <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>

SCM
  
件配置管理,如 cvs  svn
  <scm>
    <connection>scm:svn:http://127.0.0.1/svn/my-project</connection>
    <developerConnection>scm:svn:https://127.0.0.1/svn/my-project</developerConnection>
    <tag>HEAD</tag>
    <url>http://127.0.0.1/websvn/my-project</url>
  </scm>

Repositories

配置同 setting.xml 中的 开发库

Plugin Repositories
配置同  repositories

Distribution Management
用于配置分 管理,配置相 布信息 , 主要用于 布,在 mvn deploy 后表示要 布的位置
配置到文件系
<distributionManagement>
<repository>
<id>proficio-repository</id>
<name>Proficio Repository</name>
<url>file://${basedir}/target/deploy</url>
</repository>
</distributionManagement>
使用 ssh2 配置
<distributionManagement>
<repository>
<id>proficio-repository</id>
<name>Proficio Repository</name>
<url>scp://sshserver.yourcompany.com/deploy</url>
</repository>
</distributionManagement>
使用 sftp 配置
<distributionManagement>
<repository>
<id>proficio-repository</id>
<name>Proficio Repository</name>
<url>sftp://ftpserver.yourcompany.com/deploy</url>
</repository>
</distributionManagement>
使用外在的 ssh 配置
    
编译扩 展用于指定使用 wagon 外在 ssh 提供,用于提供你的文件到相 程服 器。
<distributionManagement>
<repository>
<id>proficio-repository</id>
<name>Proficio Repository</name>
<url>scpexe://sshserver.yourcompany.com/deploy</url>
</repository>
</distributionManagement>
<build>
<extensions>
<extension>
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-ssh-external</artifactId>
<version>1.0-alpha-6</version>
</extension>
</extensions>
</build>

使用 ftp 配置
<distributionManagement>
<repository>
<id>proficio-repository</id>
<name>Proficio Repository</name>
<url>ftp://ftpserver.yourcompany.com/deploy</url>
</repository>
</distributionManagement>
<build>
<extensions>
<extension>
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-ftp</artifactId>
<version>1.0-alpha-6</version>
</extension>
</extensions>
</build>

repository 
对应 于你的 开发库 ,用 信息通 settings.xml 中的 server 取得

Profiles
似于 settings.xml 中的 profiles ,增加了几个元素,如下的 式:
  <profiles>
    <profile>
      <id>test</id>
      <activation>...</activation>
      <build>...</build>
      <modules>...</modules>
      <repositories>...</repositories>
      <pluginRepositories>...</pluginRepositories>
      <dependencies>...</dependencies>
      <reporting>...</reporting>
      <dependencyManagement>...</dependencyManagement>
      <distributionManagement>...</distributionManagement>
    </profile>
  </profiles>
 
 
 
使用 maven2  团队 配置
     团队 ,建立 一的 开发环 境是必 的,而 maven 能很好帮助建立 一的 境。下面就介 如何更有效的 一的配置。
工作:
   
件:
maven2: http://maven.apache.org/download.html 
最主要的
maven-proxy
:用来代理 repository ,使用代理来 访问 多个
            http://maven-proxy.codehaus.org/
continuum
:一个不 的持 整合工具,用于自 build 支持ant,maven
http://maven.apache.org/continuum/
svn:版本控制工具

建一致的 开发环
   
    
在共享的 开发环 境中,更好的建 是保持maven的两个不同的配置文件分 管理,包括共享和用 自定 义设 置。共同的配置包括在安装目 中,而 独的 开发设 置保存在用 本地目
    
    
全局的配置文件 settings.xml
 
<servers>
       //
公司内部 ,所有的 release 版本 ,serverid 对应 repository id ,用于在 deploy 访问 使用,主要保存用 名和密
<server>
<id>internal</id>
<username>${website.username}</username>
<password>${website.pwd}</password>
<filePermissions>664</filePermissions>
<directoryPermissions>775</directoryPermissions>
</server>
//
目前的 开发库 ,用于 snapshot
<server>
<id>snapshot</id>
<username>${website.username}</username>
<password>${website.pwd}</password>
<filePermissions>664</filePermissions>
<directoryPermissions>775</directoryPermissions>
</server>
</servers>

<profiles>
<!--
核心  maven  , maven-proxy 实现 -->
<profile>
<id>central-repo</id>
<repositories>
<repository>
<id>central</id>
<name>Internal Repository</name>
<url>http://192.168.0.2:9999/repository</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>central</id>
<name>Internal Repository</name>
<url>http://192.168.0.2:9999/repository</url>
</pluginRepository>
</pluginRepositories>
</profile>

<!--
内部 ,包括公司的所有 release 版本 -->
<profile>
<id>internal-repo</id>
<repositories>
<repository>
<id>internal</id>
<name>Internal Repository</name>
<url>http://192.168.0.2:8080/repo-local</url>
<releases>
<enabled>true</enabled>
<updatePolicy>never</updatePolicy>
<checksumPolicy>warn</checksumPolicy>
</releases>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>internal</id>
<name>Internal Plugin Repository</name>
<url>http://192.168.0.2:8080/repo-local</url>
<releases>
<enabled>true</enabled>
<updatePolicy>never</updatePolicy>
<checksumPolicy>warn</checksumPolicy>
</releases>
</pluginRepository>
</pluginRepositories>
</profile>
<!--
内部 开发库  ,也可以合并 snapshot release-->
<profile>
<id>snapshot-repo</id>
<repositories>
<repository>
<id>snapshot</id>
<name>Internal Repository</name>
<url>http://192.168.0.2:8080/repo-snapshot</url>
<snapshots>
<enabled>true</enabled>
<updatePolicy>interval:60</updatePolicy>
<checksumPolicy>warn</checksumPolicy>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>snapshot</id>
<name>Internal Plugin Repository</name>
<url>http://192.168.0.2:8080/repo-snapshot</url>
<snapshots>
<enabled>true</enabled>
<updatePolicy>interval:60</updatePolicy>
<checksumPolicy>warn</checksumPolicy>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<!-- 
激活相 得配置 -->
<activeProfiles>
<activeProfile>central-repo</activeProfile>
<activeProfile>internal-repo</activeProfile>
<activeProfile>snapshot-repo</activeProfile>
</activeProfiles>
<!-- 
插件默 groupId -->
<pluginGroups>
<pluginGroup>com.mycompany.plugins</pluginGroup>
</pluginGroups>
 
包括了以下的共享因素:
置典型是共同的,只有用 名需要在用 户环 境中 置。使用一致的定 来配置共同的
  • profile了共同的因素,内部开发库,包括指定的组织或者部门发布的品。独立于核心开发库
  • 激活的profiles列表,用于激活相profile
  • plugin 只有当你的组织中有自己定的插件,用于命令行运行在pom中定
独的用 置如下:
 
<settings>
<profiles>
<profile>
<id>property-overrides</id>
<properties>
<website.username>myuser</website.username>
<website.pwd>test</website.username>
</properties>
</profile>
</profiles>
</settings>
 

建共享 开发库
    
大多数 组织 将会 建自己的内部 开发库 ,用于配置,而中心 开发库 用于 接maven
    
置内部 开发库 简单 的,使用http 协议 ,可以使用存在的http 服 器。或者 建新的服 ,使用apache,或者jetty
    假
器地址192.168.0.2 ,端口8080
    http://192.168.0.2:8080/repo-local
    
置另外一个 开发库 ,用于 目的snapshot http://192.168.0.2:8080/repo-snapshot
    
中心 ,使用maven-proxy 建,当然也可以 建自己的 像。用于下 本地 中没有的artifact


maven-proxy 

    
从网上直接下 maven-proxy-standalone-0.2-app.jar 和 proxy.properties
    在命令行中,直接运行java -jar maven-proxy-standalone-0.2-app.jar  proxy.properties
主要的配置:
置repo.list 中增加相 就可以,如下定
repo.list=repo1.maven.org,...
#maven  的中心
repo.repo1.maven.org.url=http://repo1.maven.org/maven2
repo.repo1.maven.org.description=maven.org
repo.repo1.maven.org.proxy=one
repo.repo1.maven.org.hardfail=false
repo.repo1.maven.org.cache.period=360000
repo.repo1.maven.org.cache.failures=true
以后所有的 ,都通 此方式增加。 便 一下,不要忘了注 原来的example,那是没有 访问 的。

其他配置如
端口号  port=9999
保存的位置  repo.local.store=target/repo
serverName=http://localhost:9999

准的 组织 pom
共同的内容,包括公司的 构,如 组织 ,部 以及 团队
察看一下 maven  的自身,可以作 很好的参考。
scm
 
 

<project>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.apache.maven</groupId>
<artifactId>maven-parent</artifactId>
<version>1</version>
</parent>
<groupId>org.apache.maven.scm</groupId>
<artifactId>maven-scm</artifactId>
<url>http://maven.apache.org/maven-scm/</url>
...
<modules>
<module>maven-scm-api</module>
<module>maven-scm-providers</module>
...
</modules>
</project>    
 

maven 目中可以看到如下定
 

 
<project>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.apache</groupId>
<artifactId>apache</artifactId>
<version>1</version>
</parent>
<groupId>org.apache.maven</groupId>
<artifactId>maven-parent</artifactId>
<version>5</version>
<url>http://maven.apache.org/</url>
...
<mailingLists>
<mailingList>
<name>Maven Announcements List</name>
<post>announce@maven.apache.org</post>
...
</mailingList>
</mailingLists>
<developers>
<developer>
...
</developer>
</developers>
</project>    
 
maven  pom 包括了共享的元素,如声明 件列表, 开发 者。并且大多数 apache 组织
 
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>org.apache</groupId>
<artifactId>apache</artifactId>
<version>1</version>
<organization>
<name>Apache Software Foundation</name>
<url>http://www.apache.org/</url>
</organization>
<url>http://www.apache.org/</url>
...
<repositories>
<repository>
<id>apache.snapshots</id>
<name>Apache Snapshot Repository</name>
<url>http://svn.apache.org/maven-snapshot-repository</url>
<releases>
<enabled>false</enabled>
</releases>
</repository>
</repositories>
...
<distributionManagement>
<repository>
...
</repository>
<snapshotRepository>
...
</snapshotRepository>
</distributionManagement>
</project>    
 


目自身来 ,父 pom 很少更新。所以,最后的方式保存父 pom 文件在 独的版本控制区域,它 check out ,更改和配置 .

使用Continuum持久整合

     整合自 build 你的 目,通 一定的 时间 ,包括所有的冲突在早期察 ,而不是 布的 候。另外持 整合也是一 很好的 开发 方式,使 团队 微的,交互的 变动 ,能更有效的支持平行 开发进 程。
    
可以使用 maven continuum 持久整合的服
    
安装 continuum ,比 较简 ,使用以下的命令:
    C:\mvnbook\continuum-1.0.3> bin\win32\run
    
可以通 http://localhost:8082/continuum 验证
    
了支持 continuum  e-mail 提醒,你需要相 smtp 用于 送信息。默 使用 localhost:25 ,如果你没有 置, 编辑 上面的文件改 smtp-host 置。
    
下一 svn
    svn co file://localhost/C:/mvnbook/svn/proficio/trunk proficio
    
编辑 pom.xml 用于正确相 e-mail 地址。
 

 
...
<ciManagement>
<system>continuum</system>
<url>http://localhost:8080/continuum
<notifiers>
<notifier>
<type>mail</type>
<configuration>
<address>youremail@yourdomain.com</address>
</configuration>
</notifier>
</notifiers>
</ciManagement>
...
<scm>
<connection>
scm:svn:file://localhost/c:/mvnbook/svn/proficio/trunk
</connection>
<developerConnection>
scm:svn:file://localhost/c:/mvnbook/svn/proficio/trunk
</developerConnection>
</scm>
...
<distributionManagement>
<site>
<id>website</id>
<url>
file://localhost/c:/mvnbook/repository/sites/proficio
/reference/${project.version}
</url>
</site>
</distributionManagement>    
 


提交相 的pom,然后 行mvn install

如果你返回http://localhost:8082/continuum,你会看到相
目列表。

一旦你登
后,你可以 选择 mavan 2.0 目用于增加相 目。你可以增加你的url或者提交你的本地内容。

你可以使用本地 pom url ,如下 file://localhost/c:mvnbook/proficio/pom.xml

在提交了此 url 后, continuum 将会返回相 的成功信息。
以下的原 用于更好的帮助持 整合:
早提交,
常提交:当用 户经 常提交 ,持 整合是最有效的。 并不意味着,提交不正确的代
常运行build:用于最快 检测
尽快修正失 :当失 败发 应该马 上修正失
一个有效的版本
运行clean build
运行
复杂 测试
build
所有的 构分支
运行 目的拷
=====

下载e

下载exe可安装的那种。

设maven安装在目录D:"Maven,

下面设置环境变量:

Maven_Home=D:"Maven

在PATH中加入;%Maven_Home%"bin

Maven默认的remote repositoryibiblio.org,这个地方有些人上不去,因此要更改一下。Maven找寻配置参数的默认的顺序是从maven.jar中的defaults.properties开始。打开该文件,修改:

    maven.repo.remote =     http://apache.linuxforum.net/dist/java-repositoryhttp://dist.codehaus.org,http://mirrors.sunsite.dk/maven/http://public.planetmirror.com/pub/maven,http://www.ibiblio.org/maven

Maven默认的本地文件保存在Document and Settinguser.home里面,非常不便。在%MAVEN_HOME%下建立一个local目录,将本地的repostiory保存在此,以免重装系统丢失。

    maven.home.local = ${maven.home}/local

Maven的提示语言在中文环境中可能出现乱码,进入maven.jar,发现org"apache"maven"messages目录下的messages_zh_CN.properties里面直接写了中文字符。删掉它!就不会乱码了。(或者用native2ascii转换)

好了,可以开工了。执行maven genapp,采用web模版。id设定为sample。输入maven eclipse,为该项目增加eclipse支持。

进入eclipse,导入workspace下面的Sample Project。由于缺少MAVEN_REPO变量,Eclipse提示编译失败。

EclipsePreferences – Java - Build Path - Classpath Variables中添加名为MAVEN_REPO的变量,指向D:"maven"local"repository

如果想让eclipse支持直接运行mavengoal,可以安装mavenide插件。

xe可安装的那种。

设maven安装在目录D:"Maven,

下面设置环境变量:

Maven_Home=D:"Maven

在PATH中加入;%Maven_Home%"bin

Maven默认的remote repositoryibiblio.org,这个地方有些人上不去,因此要更改一下。Maven找寻配置参数的默认的顺序是从maven.jar中的defaults.properties开始。打开该文件,修改:

    maven.repo.remote =     http://apache.linuxforum.net/dist/java-repositoryhttp://dist.codehaus.org,http://mirrors.sunsite.dk/maven/http://public.planetmirror.com/pub/maven,http://www.ibiblio.org/maven

Maven默认的本地文件保存在Document and Settinguser.home里面,非常不便。在%MAVEN_HOME%下建立一个local目录,将本地的repostiory保存在此,以免重装系统丢失。

    maven.home.local = ${maven.home}/local

Maven的提示语言在中文环境中可能出现乱码,进入maven.jar,发现org"apache"maven"messages目录下的messages_zh_CN.properties里面直接写了中文字符。删掉它!就不会乱码了。(或者用native2ascii转换)

好了,可以开工了。执行maven genapp,采用web模版。id设定为sample。输入maven eclipse,为该项目增加eclipse支持。

进入eclipse,导入workspace下面的Sample Project。由于缺少MAVEN_REPO变量,Eclipse提示编译失败。

EclipsePreferences – Java - Build Path - Classpath Variables中添加名为MAVEN_REPO的变量,指向D:"maven"local"repository

如果想让eclipse支持直接运行mavengoal,可以安装mavenide插件。

本文转自kenty博客园博客,原文链接http://www.cnblogs.com/kentyshang/archive/2008/01/18/1044741.html如需转载请自行联系原作者


kenty

相关文章
|
6月前
|
Java Maven
13Maven - Maven小总结
13Maven - Maven小总结
21 0
|
3月前
|
存储 Java 关系型数据库
|
6月前
|
安全 Java 应用服务中间件
Maven-1
Maven-1
29 0
|
7月前
|
Java 测试技术 数据库连接
|
8月前
|
Java 程序员 数据库连接
Maven的使用
Maven的使用
62 0
|
9月前
|
Java Apache 项目管理
maven
Maven 是一个流行的 Java 项目管理工具,它可以帮助开发人员管理项目依赖、构建项目、运行测试、打包和部署项目等。Maven 的主要功能包括:
165 1
|
11月前
|
存储 IDE Java
|
存储 安全 IDE
maven你必须要掌握的
《基础系列》
132 0
|
JSON 架构师 Java
maven一波流(1)——为何用maven
背景 人们觉得走路累,发明了自行车,人们觉得自行车还是累,发明了汽车,觉得汽车费油污染环境,发明电动车。 一样的道理,在Java程序开发中,程序员觉得jar包不好管理,就搞了个maven。
137 0