欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

搭建 Nexus2.7.2

程序员文章站 2022-06-11 20:21:23
...

搭建 Nexus2.7.2-03 Maven3.1.1 JAVA Project 管理 第一节:Nexus 研究汇总 1 Nexus 概念、作用 仓库管理器有两个服务目的:首先它的角色是一个高度可配置的介于你的组织与公开Maven仓库之间的代理,其次它为你的组织提供了一个可部署你组织内部生成 的构件

搭建 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

图1


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

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

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

义站点生成参数。

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

贡献者列表和许可证。

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

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

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

搭建 Nexus2.7.2

图2


2 Maven3 核心流程

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

搭建 Nexus2.7.2

图3

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

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

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

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

搭建 Nexus2.7.2

图4

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

搭建 Nexus2.7.2

图5


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

搭建 Nexus2.7.2

图6

2.1.1 工程依赖关系

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

搭建 Nexus2.7.2

图7

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

搭建 Nexus2.7.2

图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

搭建 Nexus2.7.2

图9

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

搭建 Nexus2.7.2

图10

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

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

搭建 Nexus2.7.2

图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

图12

2.3 功能实现:插件和Goal

搭建 Nexus2.7.2

图13

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

搭建 Nexus2.7.2

图14

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

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

搭建 Nexus2.7.2

图15

Site:

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

2.4 仓库(Repository)

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

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

////-.

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

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

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

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

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


2.4 小结:MAVEN核心概念

搭建 Nexus2.7.2

图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-appfinalName>
    pluginManagement>
    
                org.codehaus.mojo
                tomcat-maven-plugin
                1.1
                
                    /wp
                    8080
                    UTF-8
                    http://192.168.0.95:8080/manager/html
                    tomcat6
                
            
pluginManagement>
    
build>
Jetty:
build>
    finalName>my-web-appfinalName>
    pluginManagement>
    
      plugins>
        plugin>
         groupId>org.mortbay.jettygroupId>   
         artifactId>maven-jetty-pluginartifactId>
        plugin>
      plugins>
pluginManagement>
    
build>

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

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

搭建 Nexus2.7.2

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英文版)