• 1. Maven概述 Hudson和nexus
  • 2. Apache Maven 的定义一个更正式的 Apache Maven 的定义: Maven是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(ProjectLifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。 当你使用Maven的时候,你用一个明确定义的项目对象模型来描述你的项目,然后 Maven 可以应用横切的逻辑,这些逻辑来自一组共享的(或者自定义的)插件。 别让Maven是一个"项目管理"工具的事实吓跑你。如果你只是在找一个构建工具,Maven 能做这个工作。
  • 3. Maven2的目标使项目构建更容易; 提供统一构建系统(编译、测试、持续整合…); 提供高质量的项目信息(依赖、报告、site…); 提供开发的最佳实战指南; 能无缝的加入新的特性;
  • 4. Maven2的功能构建项目(Builds) 文档编制(Documentation) 报告(Reporting) 依赖管理(Dependencies) 配置管理(SCMs) 发布管理(Releases)
  • 5. Maven中的几个基本概念 POM(Project Object Model):Maven的核心文件,位于每个工程的根目录中,指示Maven如何工作的元数据文件。 依赖(Dependency):为了能构建或运行,Java工程一般会依赖其他的包。在Maven中,这些被依赖的包就被称为dependency。 仓库(Repository):用于存放artifact,可以是本地仓库,也可以是远程仓库。Maven有一个默认的远程仓库—central。 GroupId:工程在全局中唯一的标识符,一般来说就是工程名。groupId有利于使用一个完全的包名,将一个工程从其他有类似名称的工程里区别出来。 Artifact:工程将要产生或者需要使用的文件,(jar文件,源文件,二进制文件,war文件,甚至是pom文件)。每个artifact都由groupId和artifactId组合的标识符唯一识别。需要被使用的artifact都要放在仓库中,否则Maven无法找到(识别)它们。 插件(Plug-in):Maven2事由插件组织的,每一个功能都是由插件提供的。插件提供goal,并根据POM中找到元数据去完成工作。 Snapshot:工程中可以有一个特殊版本,它的版本号包括SNAPSHOT字样。该版本告诉Maven,该工程正在开发阶段,会经常更新(但还未发布)。
  • 6. Maven2是如何工作的
  • 7. Maven2安装过程1、先下载maven的安装包 2、将下载后的压缩包解压到任意安装目录 3、配置好JAVA_HOME环境变量,并新增M2_HOME环境变量,值是你的压缩目录 4、在path环境变量中添加maven的执行路径:%M2 _ HOME%\bin 5、新开一个命令行窗口,输入:mvn-version 来测试安装,如果成功,则提示输出如下: 6、其中可以看到maven的版本号,java的版本机器路径,以及操作系统等环境 信息 7、强烈建议maven2使用JDK5或者JDK6的java环境
  • 8. Settings.xml的配置1、打开%M2_ HOME%\conf文件夹,这是maven的配置文件,这里 提供配置好的setting.xml文件,将其覆盖该文件即可。推荐将该文件复制一份放置到C:\Documents and Settings\{youname}\.m2目录中,这个将在某些设置User Settings中用到。 2、settings.xml文件存储着maven依赖库的信息,以后所有的依赖将从这个配置文件中读取,包括maven插件的下载地址。 3、如果在运行maven的过程中发现依赖不能下载,请在浏览器中检查能否访问,如不能访问,请启动服务器;如果能访问,但依赖依然无法下载,则说明该依赖库中没有对应的依赖,需要上传对应的jar 到服务器。 4、如果修改了maven依赖库德地址,请在settings.xml文件中修改相应的访问路径。 一个典型的setting.xml:
  • 9. 在POM.xml中添加依赖在插件中添加依赖,会自动在本地仓库或者远程仓库中搜索 在pom.xml中添加依赖:
  • 10. pom.xml中基本节点介绍pom.xml文件: :文件的根节点 :pom.xml 使用的对象模型版本(current:4.0) :创建项目的组织或团体的唯一Id :项目的唯一Id,可视为项目名 :打包物的扩展名,一般有JAR,WAR,EAR等 :产品的版本号 : 项目的显示名,常用于Maven生成的文档 :组织的站点,常用于Maven生成的文档 项目的描述,常用于Maven生成的文档 目前的取值: compile:缺省值,适用于所有阶段,会随着项目一期发布。 provided:类似compile,期望JDK、容器或者使用者会提供这个依赖。如:servlet.jar runtime:只在运行时使用,如JDBC驱动,适用运行和测试阶段。 test:只在测试时使用,用于编译和运行测试代码。不会随项目发布。 system:类似provided,需要显示提供包含依赖的jar,maven不会再Repository中查找它。
  • 11. HUDSON 服务器 Hudson 是一种革命性的开放源码 CI 服务器,它从以前的 CI服务器吸取了许多经验 教训。 (1)Hudson 最吸引人的特性之一是它很容易配置:很难找到更容易设置的 CI 服务器,也很难找到开箱即用特性如此丰富的CI 服务器。 (2)Hudson 容易使用的第二个原因是它具有强大的插件框架 ,所以很容易添加特性。例如,一个 Hudson 插件可以随时间的推移跟踪FindBugs 和代码覆盖。它还可以报告测试结果的趋势(来自 JUnit 或 TestNG)以及构建结果和对应的执行时间。 (3)Hudson 是一个可扩展的持续集成引擎。主要用于:持续、自动地构建/ 测试软件项目. 监控一些定时执行的任务。
  • 12. Hudson拥有的特性包括: 易于安装-只要把hudson.war部署到servlet容器,不需要数据库支持。 易于配置-所有配置都是通过其提供的web界面实现。 集成RSS/E-mail/IM-通过RSS发布构建结果或当构建失败时通过e-mail实时通知。 生成JUnit/TestNG测试报告。 分布式构建支持-Hudson能够让多台计算机一起构建/测试。 文件识别- Hudson能够跟踪哪次构建生成哪些jar,哪次构建使用哪个版本的jar等。 插件支持-Hudson可以通过插件扩展,你可以开发适合自己团队使用的工具。
  • 13. 一.什么是持续集成 持续集成的核心概念 CI 过程会经常构建软件组件;在许多情况下,每当源代码存储库(比如 Subversion 或 ClearCase)中的代码发生变化时,都要构建软件组件。CI 的好处是:经常构建软件可以确保尽早遇到问题(比如代码缺陷),避免问题在软件开发周期晚期变复杂时才被发现。 尽管 CI 实际上是一个过程,但是持续集成 这个词常常与一个或多个工具相关联。要记住,CI 远不只是个工具。实际上,使用的工具可能是 CI 比较次要的方面,因为 CI 工具所做的仅仅是在代码存储库中探测到修改时运行构建。构建过程本身比用来运行它的工具重要得多。
  • 14. 开始使用 CI 使用 CI 需要三个组件: 用 Ant 或 Maven 等工具建立的自动构建过程 一个代码存储库,比如 CVS 或 Subversion 一个 CI 服务器,比如 Hudson,但是 cron 作业也可以满足需要 自动的构建 CI 过程会经常集成软件,这需要通过构建来完成。在 Java 环境中,maven 是常用的构建平台。可以使用 maveb可靠地自动执行编译、测试等任务,甚至可以执行软件检查和部署。在掌握了 CI 的所有组件之后,您会发现构建策略是成功的 CI 过程最重要的方面。如果缺少适当的构建过程,CI 就难以发挥作用。 源代码管理 为了让 CI 正确地发挥作用,需要一个源代码管理(SCM)系统或存储库,比如 Subversion 或 CVS。CI 服务器向 SCM 存储库查询代码修改。在找到修改时,CI 服务器执行签出(即更新本地沙箱)并执行构建。除了执行得更频繁之外,构建过程与在本地环境中执行的构建相同。
  • 15. 安装 Hudson 使用 Hudson 的主要好处之一是它的设置很简单。在最简单的情况下,Hudson 只需要两个步骤: 1.下载最新的版本(它打包为一个 WAR 文件)。 hudson官方网址:https://hudson.dev.java.net/ 2.运行 java -jar hudson.war。 这样就可以了。因为下载的是一个 WAR 文件,所以如果愿意,可以将它部署在 Tomcat 或 JBoss 等容器中。这完全由您自己决定。当然,Hudson 假设在安装它的机器上运行着 Java 5,而且如果定义了 JAVA_HOME 环境变量,Hudson 就会使用它。(正如前面提到的,Hudson 需要 Java 5。) 在安装并运行 Hudson 之后(将 WAR 文件部署到 servlet 容器或从命令行执行 java -jar hudson.war),启动浏览器并访问默认安装位置。如果通过命令行运行 Hudson 而且您在本地机器上,那么可以访问 http://localhost:8080/。
  • 16. Nexus介绍 Nexus 是Maven仓库管理器,如果你使用Maven,你可以从Maven中央仓库 下载所需要的构件(artifact),但这通常不是一个好的做法,你应该在本地架设一个Maven仓库服务器,在代理远程仓库的同时维护本地仓库,以节省带宽和时间,Nexus就可以满足这样的需要。此外,他还提供了强大的仓库管理功能,构件搜索功能,它基于REST,友好的UI是一个extjs的REST客户端,它占用较少的内存,基于简单文件系统而非数据库。这些优点使其日趋成为最流行的Maven仓库管理器。
  • 17. Nexus的下载和安装 你可以从http://nexus.sonatype.org/downloads/ 下载最新版本的Nexus,笔者使用的是1.3.0版本。 Nexus提供了两种安装方式: 一种是内嵌Jetty的bundle,只要你有JRE就能直接运行。 第二种方式是WAR,你只须简单的将其发布到web容器中即可使用。 Bundle方式安装 解压nexus-webapp-1.3.0-bundle.zip 至任意目录,如D:\dev_tools ,然后打开CMD,cd至目录D:\dev_tools\nexus-webapp-1.3.0\bin\jsw\windows-x86-32 ,运行Nexus.bat 。你会看到Nexus的启动日志,当你看到“Started SelectChannelConnector@0.0.0.0:8081”之后,说明Nexus启动成功了。 WAR方式安装 你需要有一个能运行的web容器,这里以Tomcat为例,加入Tomcat的安装目录位于D:\dev_tools\apache-tomcat-6.0.18 ,首先我们将下载的nexus-webapp-1.3.0.war 重命名为nexus.war ,然后复制到D:\dev_tools\apache-tomcat-6.0.18\webapps\nexus.war ,然后启动CMD,cd到D:\dev_tools\apache-tomcat-6.0.18\bin\ 目录,运行startup.bat 。
  • 18. 1.配置nexus 首先登录,默认地址http://localhost:8081/nexus/,默认用户名密码为admin/admin123.     nexus默认是关闭远程索引下载功能的。开启的方式:     点击Administration菜单下面的Repositories,将这三个仓库Apache Snapshots,Codehaus Snapshots,Maven Central的     Download Remote Indexes修改为true。然后在这三个仓库上分别右键,选择Re-index,这样Nexus就会去下载远程的索引文件。 2.管理仓库 以管理员用户登陆然后点击左边导航菜单Administration下面的Repositories。Nexus提供了三种不同的仓库。 (1)代理仓库 一个代理仓库是对远程仓库的一个代理。 (2)宿主仓库 一个宿主仓库是由Nexus托管的仓库。 3rd Party   这个宿主仓库应该用来存储在公共Maven仓库中找不到的第三方依赖。这种依赖的样例有:你组织使用的,商业的,私有的类库如Oracle JDBC驱动。 Releases   这个宿主仓库是你组织公布内部发布版本的地方。 Snapshots   这个宿主仓库是你组织发布内部快照版本的地方。 (3)虚拟仓库   一个虚拟仓库作为Maven 1的适配器存在。Nexus自带了一个central-m1虚拟仓库
  • 19. 3. 管理组 组是Nexus一个强大的特性,它允许你在一个单独的URL中组合多个仓库。Nexus自带了两个组:public和public-snapshots。public组中组合了三个宿主仓库:3rd Party, Releases, 和Snapshots,还有中央Maven仓库。而public-snapshots组中组合了Apache Snapshots和Codehaus Snapshots仓库。 4. 配置maven 要让maven使用Nexus作为仓库,要修改~/.m2/settings.xml.
  • 20. 5.部署构件至Nexus  要部署构件至Nexus,在distributionManagement中提供仓库URL,然后运行mvn deploy。Maven会通过一个简单的HTTP PUT将项目POM和构件推入至你的Nexus安装。需要配置你项目POM中distributionManagement部分的repository。 这样还没完,这时如果部署会报错,还要在~/.m2/settings.xml中添加如下的服务器登录信息:
  • 21. 部署第三方构件:  构件可能是私有数据库的JDBC驱动如Oracle,或者你依赖于另一个JAR,它既不开源也无法免费获得。在这样的情况下,你就需要手动拿来这些构件然后发布到你自己的仓库中。Nexus提供宿主的“third-party”仓库,就是为了这个目的。   使用以下命令发布该文件至Nexus: 6.Nexus监听端口   默认情况下,Nexus监听端口8081。你可以更改这个端口,通过更改${NEXUS_HOME}/conf/plexus.properties的值,为此,停止Nexus,更改文件中applicationPort的值,然后重启Nexus。 7.Maven Profiles    Maven中的profile是一组可选的配置,可以用来设置或者覆盖配置默认值。有了profile,你就可以为不同的环境定制构建。profile可以在pom.xml中配置,并给定一个id。然后你就可以在运行Maven的时候使用的命令行标记告诉Maven运行特定profile中的目标。
  • 22. 如果你开始大量使用Maven profile,你会希望将profile从POM中分离,使用一个单独的文件如profiles.xml。你可以混合使用定义在pom.xml中和外部profiles.xml文件中的profile。只需要将profiles元素放到${basedir}目录下的profiles.xml文件中,然后照常运行Maven就可以。profiles.xml文件的大概内容如下: settings profile可以应用到所有你使用Maven构建的项目。你可以在两个地方定义settings profile:定义在~/.m2/settings.xml中的用户特定settings profile,或者定义在${M2_HOME}/conf/settings.xml中的全局settings profile。
  • 23. 虽然写了很多 但是不算理解,希望能通过做些项目加深对maven2的理解与应用。