搭建 Nexus2.7.2-03 + Maven3.1.1 + JAVA Project 管理

搭建 Nexus2.7.2-03 + Maven3.1.1  JAVA Project 管理


第一节:Nexus 研究汇总

1 Nexus 概念、作用

     仓库管理器有两个服务目的:首先它的角色是一个高度可配置的介于你的组织与公开Maven仓库之间的代理,其次它为你的组织提供了一个可部署你组织内部生成

的构件的地方。代理Maven仓库有很多好处。对于一开始使用Maven的情况来说,通过为所有的来自中央Maven仓库的构件安装一个本地的缓存,你将加速组织内部的

所有构建.


2 Nexus 安装

1):官方下载http://www.sonatype.org/nexus/  安装包,包下载分二种1:含有JETTY  WEB容器的BUNDLE包 2:不含WEB容器的WAR包

2):解压,以当前根目录D:\ThridFarme为例:

打开:${NEXUS_HOME}\bin\jsw\windows-x86-64,依次运行install-nexus.bat、start-nexus.bat,运行nexus

   官网说明: Open Nexus Professional in a Web Browser,ifyou accept all of the defaults, Nexus Professional can be accessed by pointingyour browser at http://localhost:8081/nexus and entering in the following trialcredentials:

  username: admin  password: admin123


3 Nexus 管理操作

即http://localhost:8081/nexus管理,暂缺


第二节:Maven3 研究汇总

1 Maven3 概念、作用

Maven3概念:

Maven是基于项目对象模型(POM),通过一小段描述信息来管理项目的构建,也是报告和文档的软件项目管理工具; 它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(DependencyManagement System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。使用Maven时,用一个明确定义的项目对象模型来描述你的项目,Maven可以应用横切的逻辑,这些逻辑来自一组共享的(或者自定义的)插件

Maven 有一个项目生命周期,当你运行 mvn install 的时候被调用。这条命令告诉 Maven 执行一系列的有序的目标步骤,直到到达你指定的生命周期,过程中Maven会运行许多默认的插件目标,像编译compile和创建JAR(jar) 文件类似工作。

Maven3作用:

Maven能够很方便管理项目的构建、项目报告、生成站点、管理JAR文件等等。

MAVEN概念模型:

搭建 Nexus2.7.2-03 + Maven3.1.1 + JAVA Project 管理_第1张图片

图1


POM简介:包含了四类描述和配置项目

1) POM关系:一个项目很少孤立存在;它会依赖于其它项目,可能从父项目继承POM设置,它要定义自身的坐标,可能还会包含子模块。

2)构建设置:在这一部分,我们自定义Maven构建的默认行为。我们可以更改源码和测试代码的位置,可以添加新的插件,可以将插件目标绑定到生命周期,我们还可以自定

义站点生成参数。

3)总体信息:它包含了一个项目的而名称,项目的URL,发起组织,以及项目的开发者

贡献者列表和许可证。

4)构建环境:构建环境包含了一些能在不同使用环境中 激活的profile。例如,在开发过程中你可能会想要将应用部署到一个而开发服务器上,而在产品环境中你会需要将

应用部署到产品服务器上。构建环境为特定的环境定制了构建设置,通常它还会

由~/.m2中的自定义settings.xml补充。

搭建 Nexus2.7.2-03 + Maven3.1.1 + JAVA Project 管理_第2张图片

图2


2 Maven3 核心流程

2.1maven管理的目标:工程(Software  Project)

搭建 Nexus2.7.2-03 + Maven3.1.1 + JAVA Project 管理_第3张图片

图3

软件工程的唯一标识是由团体标识的约定ID(groupId)、单独项目的唯一标识符(artifactId)、版本(version) 共同决定;

PackageType:每个工程都有一个打包类型,可以是jar, war, ear 或 pom,打包类型决定工程最终产物的类型,其中pom类型用于构件多模块工程。

工程之间有两种关系:依赖(dependency)和聚合()

依赖:是类与类之间的连接. 表示一个类依赖于另一个类的定义. 依赖关系总是单向的 。可以简单的理解,就是一个类A使用到了另一个类B


图4

关联(association)关系: 表示类与类之间的联接, 体现的是两个类、或者类与接口之间语义级别的一种强依赖关系,它使一个类知道另一个类的属性和方法. 关联可以使用单箭头表示单向关联, 使用双箭头或不使用箭头表示双向关联, 关联有两个端点, 在每个端点可以有一个基数, 表示这个关联的类可以有几个实例. 常见的基数(0..1:0、0..*、1、1..*) 


图5


聚合: 关联关系的一种特例, 是强的关联关系. 聚合是整体和个体之间的关系,即has-a的关系,此时整体与部分之间是可分离的,他们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享

搭建 Nexus2.7.2-03 + Maven3.1.1 + JAVA Project 管理_第4张图片

图6

2.1.1 工程依赖关系

(1)依赖关系的管理,是maven最为强大特征之一。一个工程可以依赖多个其他工程, 通过工程的唯一标识(groupId+artifactId+version)可以明确指明依赖的库及版本,而且能够处理依赖关系的传递(transitive dependencies),如图7:


图7

(2)maven可以指定依赖的作用范围(scope),包括以下几种:

搭建 Nexus2.7.2-03 + Maven3.1.1 + JAVA Project 管理_第5张图片

图8

compile范围(默认):编译范围依赖,在编译,测试和运行中都依赖于类包,在所有的classpath中可用,同时它们也会被打包。

test范围: JUnit测试范围(test)的依赖,运行compiler:testCompile和surefire:test目标的时候才会将POM依赖JAR包被加入classpath中

   provided范围:已提供范围依赖,开发过程只有在编译(classpath)和测试时需要一个类库,而该类库在运行的时候由容器提供,它们不是传递性的,也不会被打包,不会被捆绑在构建的输出中,可用于排除WAR文件中特定的依赖。如Servlet API的JAR文件包不会在web应用WEB-INF/lib目录下生成。

Runtime:运行时范围依赖在运行和测试系统的时候需要,但在编译的时候不需要。比如,你可能在编译的时候只需要JDBC API JAR,而只有在运行的时候才需要JDBC驱动实现。

system(系统范围):system范围依赖与provided类似,但是你必须显式的提供一个对于本地系统中JAR文件的路径。这么做是为了允许基于本地对象编译,而这些对象是系统类库的一部分。这样的构件应该是一直可用的,Maven也不会在仓库中去寻找它。如果你将一个依赖范围设置成系统范围,你必须同时提供一个systemPath元素。

(不推荐使用的,应该尽量从公共或定制的Maven仓库中引用依赖)。

Maven如何解决依赖关系的传递性可能导致依赖的版本、scope等发生冲突问题? maven提供了仲裁机制(最短路径原则、依赖的排除 、依赖的显示声明)。

查看项目依赖关系树:mvn dependency:tree

2.1.2 工程聚合关系

前面提到pom类型用于于构件多模块工程,这体现了project之间的一种聚合关系:将一系列小的模块聚合成整个产品。

通过聚合后的工程可以同时管理每个相关模块的构建、清理、文档等工作。 聚合关系通过在子工程中指定一个pom类型的project作为父project来定义。

搭建 Nexus2.7.2-03 + Maven3.1.1 + JAVA Project 管理_第6张图片

搭建 Nexus2.7.2-03 + Maven3.1.1 + JAVA Project 管理_第7张图片

图9

2.2 maven的核心:生命周期和阶段


图10

maven将工程(Project)的构建过程理解为不同的生命周期(LifeCycle)和阶段(Phase)。 在工程的构建过程中,存在着不同的生命周期,这些生命周期互相独立,之间也没有一定的顺序关系。 每个生命周期又划分为不同的阶段(Phase)。阶段之间有明确的顺序关系, 同一生命周期内的阶段必须按顺序依次执行。

maven内置了三个生命周期,并为每个生命周期内置了一些阶段。下面列举出maven内置的生命周期及主要的阶段: 

搭建 Nexus2.7.2-03 + Maven3.1.1 + JAVA Project 管理_第8张图片

图11

·    default:构建(Build)

1.  validate:验证项目是否正确,所有必需的信息是否可用。

2.  compile:编译项目中的代码。

3.  test:用相关的单元测试框架测试编译后的代码,这些运行的测试并不会随项目打包和布署。

4.  package:将编译后的代码打包成相应的格式文件,如jar包。

5.  integration-test: 如果需要在一个综合环境中运行我们的测试,这个阶段将会运行和布署项目到该环境中。

6.  verify: 检查项目的包是否正确和符合要求。

7.  install:将包安装到本地maven仓库,可以让其他项目作为依赖使用该包。

8.  deploy:将包发布到远程的maven仓库,并提供给其他开发者使用。

·        clean:清理

1.  pre-clean 准备清理

2.  clean 执行清理工作

3.  post-clean 执行清理后的后续工作

·        site:生成项目文档和站点

1.  pre-site 准备生成

2.  site 生成项目站点和文档

3.  post-site 执行生成文档后的后续工作

4.  site-deploy 发布项目文档

更详细的phase说明参考: http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html#Lifecycle_Reference

   再者像mvn package:此命令行并没有指定一个插件目标,而是指定了一个Maven生命周期阶段。阶段是在被Maven称为“构建生命周期”中的一个个步骤。生命周期是包含在一个项目构建中的一系列有序的阶段。

搭建 Nexus2.7.2-03 + Maven3.1.1 + JAVA Project 管理_第9张图片

图12

2.3 功能实现:插件和Goal

搭建 Nexus2.7.2-03 + Maven3.1.1 + JAVA Project 管理_第10张图片

图13

Maven中定义的工程周期和阶段只是抽象的概念,不涉及具体的功能。 具体的功能由插件(Plugin)实现。一个Maven插件是一个单个或者多个目标(Goal)的集合。Maven有一些简单但核心的插件,像Jar插件,它包含了一组创建JAR文件的目标,Compiler插件,它包含了一组编译源代码和测试代码的目标,或者Surefire插件,它包含一组运行单元测试和生成测试报告的目标。而其它的,更有专门的插件包括:Hibernate3插件,用来集成流行的持久化框架Hibernate。Maven也提供了自定义插件的能力。

搭建 Nexus2.7.2-03 + Maven3.1.1 + JAVA Project 管理_第11张图片

图14

为了解耦插件的功能和工程阶段,实现高度的可配置性,maven规定插件只是实现目标的功能, 通过配置来决定在哪个阶段执行(Execution)哪些目标操作。 甚至可以把一个Goal绑定到多个Phase,以实现复用。

maven内置了一些默认的插件,并根据不同的工程packing类型在各个phase中默认绑定了一些goal。 下表中列出default生命周期中各阶段默认绑定的goal,其中goal按照管理使用plugin name:goalname的方式标记:

搭建 Nexus2.7.2-03 + Maven3.1.1 + JAVA Project 管理_第12张图片

图15

Site:

最后需要说明的是,maven的插件是一种packaging类型为maven-plugin的project, 可以使用maven project的依赖,配置插件等等一切特性。

2.4 仓库(Repository)

Maven仓库是通过结构来定义的,一个Maven仓库是项目构件的一个集合,这些构件存储在一个目录结构下面,它们的格式能很容易的被Maven所理解。在一个Maven仓库中,所有的东西存储在一个与Maven项目坐标十分匹配的目录结构中。你可以打开浏览器,然后浏览中央Maven仓库http://repo1.maven.org/maven2/ 来看这样的结构。

Maven仓库的标准是按照下面的目录格式来存储构件,相对于仓库的根目录:

/<groupId>/<artifactId>/<version>/<artifactId>-<version>.<packaging>

Maven从远程仓库下载构件和插件到你本机上,存储在你的本地Maven仓库里。一旦

Maven已经从远程仓库下载了一个构件,它将永远不需要再下载一次,因为maven会首

先在本地仓库查找插件,然后才是其它地方。

项目依赖于一些既不免费也不公开的包。在这种情况下,你需要要么在你组织的网络里安装一个定制的仓库,要么手动的安装这些依赖。默认的远程仓库可以被替换,或者增加一个你组织维护的自定义Maven仓库的引用。

仓库可以分为本地库(local)和远程库(remote)。本地库通常位于本机的~/.m2/repository文件夹, 远程库最常见的是maven中央库,此外也会有一些私服库用于企业内部。


2.4 小结:MAVEN核心概念


图16

 

概念

说明

LifeCycle

生命周期,maven内置default,sie,clean三个生命周期

Phase

阶段,每个生命周期有不同的阶段

Plugin

插件,实现实际的构建功能

Goal

一个插件可以实现多个goal,goal具备具体的功能

Execution

通过配置,决定在某个Phase执行哪些Goal

Project

maven管理的目标:软件工程,小的工程可以聚合成大工程

PackageType

为了便于管理工程,按照构建目标区分成不同的工程类型,如jar,war,ear等

Dependency

依赖,project之间存在依赖关系

DependencyScope

maven对依赖定义了不同的作用范围

Management

可以配置一个工程如何管理依赖关系

Repository

仓库,存放包,分为本地库和远程库

Build

构建的动作。使用maven管理工程,主要是指定将project构建到某个phase



3 Maven3 安装

见:http://blog.csdn.net/jun55xiu/article/category/1439861

验证安装:mvn -version


4 常见应用

1)创建一个Project

 mvn archetype:create -DgroupId=com.mycompany.app

-DartifactId=my-app-DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

mvn archetype:generate 固定格式OR create

-DgroupId  组织标识(包名)

-DartifactId项目名称

-DarchetypeArtifactId  原型ArchetypeId:maven-archetype-quickstart,创建一个JavaProject;maven-archetype-webapp,创建一个WebProject

-DinteractiveMode 是否使用交互模式

2)命令

编译源代码  mvn compile

 编译测试代码mvn test-compile

清空mvn clean

  运行测试 mvn test

 生产站点目录并打包 mvn site-deploy

 安装当前工程的输出文件到本地仓库 mvn install

 打包 mvn package

 先清除再打包mvn clean package

 打成jar包mvn jar:jar

生成eclipse项目mvneclipse:eclipse

查看帮助信息mvn help:help

查看maven有哪些项目类型分类  mvn archetype:create -DarchetypeCatalog=intrenal

3)构建一个简单Java项目

mvn archetype:create -DgroupId=cn.luxh.app-DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart-DinteractiveMode=false

4)构建一个简单JAVA WEB项目

mvn archetype:create -DgroupId=cn.luxh.app -DartifactId=my-web-app -DarchetypeArtifactId=maven-archetype-webapp -DinteractivMode=false 
回车
cd :/%roo%/my-web-app/,执行:mvn package

   构建成功后,my-web-app项目target目录/my-web-app.war

   集成tomcat、Jetty发布运行,需要配置pom.xml

  Tomcat:

 <build>
    <finalName>my-web-app</finalName>
    <pluginManagement>
    <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>tomcat-maven-plugin</artifactId>
                <version>1.1</version>
                <configuration>
                    <path>/wp</path>
                    <port>8080</port>
                    <uriEncoding>UTF-8</uriEncoding>
                    <url>http://192.168.0.95:8080/manager/html</url>
                    <server>tomcat6</server>
                </configuration>
            </plugin>
</pluginManagement>
    
</build>
Jetty:
<build>
    <finalName>my-web-app</finalName>
    <pluginManagement>
    <!--配置Jetty-->
      <plugins>
        <plugin>
         <groupId>org.mortbay.jetty</groupId>   
         <artifactId>maven-jetty-plugin</artifactId>
        </plugin>
      </plugins>
</pluginManagement>
    
</build>

执行:mvn tomcat:run jetty:run 就可以在8080端口上访问应用

5)标准的Maven JAVA项目生成框架


6)Maven的默认设置

在某个项目基础目录执行命令:$ mvn help:effective-pom

见‘Maven Dafalut pom.xml’

7)Maven 齐全POM配置文件要素说明

见‘maven_POM.xml详解’


第三节:用nexus搭建maven私服

见‘搭建Maven私服_并配置Nexus环境(完美版本).pdf’

第四节:eclipse+nexus+maven+JAVA Project管理实战

 后期完善



注:maven个人推荐书籍:Maven权威指南(中文版)以及官网(mvnexmvnref英文版)



你可能感兴趣的:(maven,nexus)