创建私服nexus
1, 下载并解压zip,http://nexus.sonatype.org/downloads
2, 启动:D:\nexus-2.7.1-01-bundle\nexus-2.7.1-01\bin\jsw\windows-x86-64
3, 访问http://localhost:8081/nexus, 登录<admin,admin123>,
可以管理nexus内置的仓库(够用),也可以创建自己的
maven在setting.xml里配置私服后,会自动下载到私服,再到本地仓库
D:\nexus-2.7.1-01-bundle\sonatype-work\nexus\storage\central\org\springframework
D:\repo\org\springframework
总结:
1, plugin扩展机制,好!
几乎每个mvn命令都对应一个plugin,在D:\repo\org\apache\maven\plugins目录下。
比如:maven-compiler-plugin, maven-jar-plugin, maven-surefire-plugin...
2, 项目(对应一个jar)下载或者安装到Maven本地仓库后,其他项目才能使用!!!!!!!!!!!!!!!
Maven生命周期,从大量项目和构建工具中学习反思,对构建过程的抽象:
项目的各个阶段phase:清理,初始化,编译(maven-compiler-plugin),测试(maven-surefire-plugin),打包,集成测试,验证,部署,站点生成。
抽象,意味着不做实际工作(交给插件完成比如),类似设计模式中的模板方法
validate验证项目是否正确,以及所有为了完整构建必要的信息是否可用
generate-sources生成所有需要包含在编译过程中的源代码
process-sources处理源代码,比如过滤一些值
generate-resources生成所有需要包含在打包过程中的资源文件
process-resources复制并处理资源文件至目标目录,准备打包
compile编译项目的源代码
process-classes后处理编译生成的文件,例如对Java类进行字节码增强(bytecode enhancement)
generate-test-sources生成所有包含在测试编译过程中的测试源码
process-test-sources处理测试源码,比如过滤一些值
generate-test-resources生成测试需要的资源文件
process-test-resources复制并处理测试资源文件至测试目标目录
test-compile编译测试源码至测试目标目录
test使用合适的单元测试框架运行测试。这些测试应该不需要代码被打包或发布
prepare-package在真正的打包之前,执行一些准备打包必要的操作。这通常会产生一个包的展开的处理过的版本(将会在Maven 2.1+中实现)
package将编译好的代码打包成可分发的格式,如JAR,WAR,或者EAR
pre-integration-test执行一些在集成测试运行之前需要的动作。如建立集成测试需要的环境
integration-test如果有必要的话,处理包并发布至集成测试可以运行的环境
post-integration-test执行一些在集成测试运行之后需要的动作。如清理集成测试环境。
verify执行所有检查,验证包是有效的,符合质量规范
install安装包至本地仓库,以备本地的其它项目作为依赖使用
deploy复制最终的包至远程仓库,共享给其它开发人员和项目(通常和一次正式的发布相关)
项目聚合: 一次命令构建两个项目
<project...>
<modelVersion>4.0.0</modelVersion>
<groupId>com.juvenxu.mvnbook.account</groupId>
<artifactId>account-aggregator</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>pom</packaging>//聚合必须为pom,否则无法构建
<name>Account Aggregator</name>
<modules>
<module>account-email</module>
<module>account-persist</module>
</modules>
</project>
项目继承:继承父pom的配置
可继承的元素:groupId,version...dependencies,build. 不可继承的元素:artifactId
<parent>
<groupId>com.juvenxu.mvnbook.account</groupId>
<artifactId>account-parent</artifactId>
<version>1.0.0-SNAPSHOT</version>
<relativePath>../account-parent/pom.xml</relativePath>
</parent>
<artifactId>account-email</artifactId>
<name>Account Email</name>
注意:可能给未来的子项目引入不必要的依赖。故,一般最好只继承version,scope
反应堆(多个模块组成的一个构建过程)构建顺序
Reactor Build Order:
Account Parent
Account Email
Account Persist
Account Aggregator
剪裁反应堆: mvn install -pl account-email, account-persist //只构建这两个项目
超级POM(类似Object类)
%MAVEN_HOME%/lib/maven-model-builder-x.x.x.jar\org\apache\maven\model/pom-4.0.0.xml
预定义了:仓库<repositories>,插件仓库<pluginRepositories>,<build>,<profiles>
com.google.code.kaptcha:kaptcha:jar:jdk15:2.3 这个不在中央仓库中,需要自己添加代理仓库-->仓库组。
指定某个测试类,需要进入当前项目下,不可以在父目录中。
mvn test -Dtest=RandomGeneratorTest
//测试覆盖率报告,在targer/site/cobertura/index.html
D:\workspace\account-parent\account-captcha>mvn cobertura:cobertura
hudson
持续集成CI(Continuous Integration)
稍等hudson启动
C:\Users\river\Downloads>java -jar hudson-3.1.2.war
纯java打war包
1、D:\workspace\wnjWeb>jar cvf wnjWeb.war *.*
2、将war文件拷贝到tomcat\webapps\下,(将必要的jar文件拷贝到tomcat\lib??)
3、D:\study\apache-tomcat-7.0.52\bin>startup.bat
4、打开浏览器访问http://localhost:8080/wnjWeb/hello