创徏一致的开发环?/b>
在共享的开发环境中Q更好的是保持maven的两个不同的配置文g分别理Q包括共享和用户自定义设|。共同的配置包括在安装目录中Q而单独的开发设|保存在用户本地目录?br />
全局的配|文件settings.xml
<servers>
//公司内部库,所有的release版本,serverid对应于repository idQ用于在deployӞ讉K使用Q主要保存用户名和密?br /><server>
<id>internal</id>
<username>${website.username}</username>
<password>${website.pwd}</password>
<filePermissions>664</filePermissions>
<directoryPermissions>775</directoryPermissions>
</server>
//目前的开发库Q用于snapshot?br /><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>
<!--定义内部开发库 Q也可以合ƈ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>
<!-- Ȁzȝ应得配置-->
<activeProfiles>
<activeProfile>central-repo</activeProfile>
<activeProfile>internal-repo</activeProfile>
<activeProfile>snapshot-repo</activeProfile>
</activeProfiles>
<!-- 插g默认groupId -->
<pluginGroups>
<pluginGroup>com.mycompany.plugins</pluginGroup>
</pluginGroups>
包括了以下的׃n因素Q?br />
- 服务器设|典型是共同的,只有用户名需要在用户环境中设|。用一致的定义来配|共同的讄
- profile定义了共同的因素Q内部开发库Q包括指定的l织或者部门发布的产品。这些库独立于核心开发库?/li>
- Ȁzȝprofiles列表Q用于激zȝ应的profile
- plugin l只有当你的l织中有自己定义的插Ӟ用于命o行运行在pom中定义?/li>
对于单独的用h_讄如下Q?br />
<settings>
<profiles>
<profile>
<id>property-overrides</id>
<properties>
<website.username>myuser</website.username>
<website.pwd>test</website.username>
</properties>
</profile>
</profiles>
</settings>
创徏׃n开发库
大多数组l将会创q内部开发库Q用于配|,而中心开发库用于q接maven
讄内部开发库是简单的Q用http协议Q可以用存在的http 服务器。或者创建新的服务,使用apacheQ或者jetty
假设服务器地址192.168.0.2 ,端口8080
http://192.168.0.2:8080/repo-local
讄另外一个开发库Q用于设|项目的snapshot库http://192.168.0.2:8080/repo-snapshot
中心镜像库,使用maven-proxy创徏Q当然也可以创徏自己的镜像。用于下载本地库中没有的artifact
maven-proxy 讄
从网上直接下载maven-proxy-standalone-0.2-app.jar?proxy.properties
在命令行中,直接q行java -jar maven-proxy-standalone-0.2-app.jar proxy.properties
主要的配|:
讄repo.list 中增加相应的库就可以Q如下定义:
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
以后所有的q程库,都通过此方式增加。顺便说一下,不要忘了注释原来的exampleQ那是没有办法访问的?br />
其他配置?br />端口?port=9999
保存的位|?repo.local.store=target/repo
serverName=http://localhost:9999
创徏标准的组lpom
定义共同的内容,包括公司的结构,如组l,部门以及团队?br />察看一下maven 的自w,可以作ؓ很好的参考?br />如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爉目中可以看到如下定义Q?
<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包括了共享的元素Q如声明邮g列表Q开发者。ƈ且大多数目l承apachel织Q?br />
<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>
对于目自n来说Q父pom很少更新。所以,最后的方式保存父pom文g在单独的版本控制区域Q它们能够check outQ更改和配置.
使用Continuum持久整合
持箋整合自动build你的目Q通过一定的旉Q包括所有的冲突在早期察觉,而不是发布的时候。另外持l整合也是一U很好的开发方式,使团队成员能产生l微的,交互的变动,能更有效的支持^行开发进E?br /> 可以使用maven的continuum作ؓ持久整合的服务?br /> 安装continuumQ比较简Q用以下的命oQ?br /> C:\mvnbook\continuum-1.0.3> bin\win32\run
可以通过http://localhost:8082/continuum来验?br /> Z支持continuum 发送e-mail提醒Q你需要相应的smtp服务用于发送信息。默认用localhost:25Q如果你没有讄Q编辑上面的文g改变smtp-host讄?br /> 下一步,讄svn目录Q?br /> 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/continuumQ你会看到相应的目列表?br />
一旦你d后,你可以选择mavan 2.0目用于增加相应的项目。你可以增加你的url或者提交你的本地内宏V?br />
你可以用本地pom urlQ如下file://localhost/c:mvnbook/proficio/pom.xml
在提交了此url后,continuum会q回相应的成功信息?br />以下的原则用于更好的帮助持箋整合Q?br />早提交,l常提交Q当用户l常提交Ӟ持箋整合是最有效的。这q不意味着Q提交不正确的代码?br />l常q行buildQ用于最快检失?br />快修正p|Q当p|发生Ӟ应该马上修正p|
一个有效的版本
q行clean build
q行复杂的综合测?br />build所有的目l构分支
持箋q行目的拷?br />

]]>