ITKeyword,专注技术干货聚合推荐

注册 | 登录

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

jun55xiu 分享于 2014-07-24

推荐:【项目管理】之maven+nexus环境搭建

打算在我们的项目中引入maven,因为maven的好处显而易见,这篇文章将重点介绍maven的配置及nexus的搭建。首先介绍maven,具体配置如下: 首先去官网下载maven,现

2019阿里云全部产品优惠券(新购或升级都可以使用,强烈推荐)
领取地址https://promotion.aliyun.com/ntms/yunparter/invite.html

搭建 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概念模型: 图1 POM简介:包含了四类描述和配置项目 1) POM关系:一个项目很少孤立存在;它会依赖于其它项目,可能从父项目继承POM设置,它要定义自身的坐标,可能还会包含子模块。 2)构建设置:在这一部分,我们自定义Maven构建的默认行为。我们可以更改源码和测试代码的位置,可以添加新的插件,可以将插件目标绑定到生命周期,我们还可以自定 义站点生成参数。 3)总体信息:它包含了一个项目的而名称,项目的URL,发起组织,以及项目的开发者 贡献者列表和许可证。 4)构建环境:构建环境包含了一些能在不同使用环境中 激活的profile。例如,在开发过程中你可能会想要将应用部署到一个而开发服务器上,而在产品环境中你会需要将 应用部署到产品服务器上。构建环境为特定的环境定制了构建设置,通常它还会 由~/.m2中的自定义settings.xml补充。 图2 2 Maven3 核心流程 2.1maven管理的目标:工程(Software

Project) 图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的关系,此时整体与部分之间是可分离的,他们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享; 图6 2.1.1 工程依赖关系 (1)依赖关系的管理,是maven最为强大特征之一。一个工程可以依赖多个其他工程, 通过工程的唯一标识(groupId+artifactId+version)可以明确指明依赖的库及版本,而且能够处理依赖关系的传递(transitive dependencies),如图7: 图7 (2)maven可以指定依赖的作用范围(scope),包括以下几种: 图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来定义。 图9 2.2 maven的核心:生命周期和阶段 图10 maven将工程(Project)的构建过程理解为不同的生命周期(LifeCycle)和阶段(Phase)。 在工程的构建过程中,存在着不同的生命周期,这些生命周期互相独立,之间也没有一定的顺序关系。 每个生命周期又划分为不同的阶段(Phase)。阶段之间有明确的顺序关系, 同一生命周期内的阶段必须按顺序依次执行。 maven内置了三个生命周期,并为每个生命周期内置了一些阶段。下面列举出maven内置的生命周期及主要的阶段:

图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称为“构建生命周期”中的一个个步骤。生命周期是包含在一个项目构建中的一系列有序的阶段。 图12 2.3 功能实现:插件和Goal 图13 Maven中定义的工程周期和阶

推荐:Maven仓库管理-Nexus(转帖后加强版)

Maven仓库管理-Nexus(转帖后加强版) 分类:

maven--nexus 2010-10-05 00:23

2821人阅读

评论(3)

收藏

举报 前面我讲到为什么要使用Maven, Maven的安装,

段只是抽象的概念,不涉及具体的功能。 具体的功能由插件(Plugin)实现。一个Maven插件是一个单个或者多个目标(Goal)的集合。Maven有一些简单但核心的插件,像Jar插件,它包含了一组创建JAR文件的目标,Compiler插件,它包含了一组编译源代码和测试代码的目标,或者Surefire插件,它包含一组运行单元测试和生成测试报告的目标。而其它的,更有专门的插件包括:Hibernate3插件,用来集成流行的持久化框架Hibernate。Maven也提供了自定义插件的能力。 图14 为了解耦插件的功能和工程阶段,实现高度的可配置性,maven规定插件只是实现目标的功能, 通过配置来决定在哪个阶段执行(Execution)哪些目标操作。 甚至可以把一个Goal绑定到多个Phase,以实现复用。 maven内置了一些默认的插件,并根据不同的工程packing类型在各个phase中默认绑定了一些goal。 下表中列出default生命周期中各阶段默认绑定的goal,其中goal按照管理使用plugin name:goalname的方式标记: 图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权威指南(中文版)以及官网(mvnex、mvnref英文版)

推荐:Maven仓库管理-Nexus

Maven仓库管理-Nexus @import url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashxtype=style&file=SyntaxHighlighter.css);@import url(/css/c

搭建 Nexus2.7.2-03 + Maven3.1.1  JAVA Project 管理 第一节:Nexus 研究汇总 1 Nexus 概念、作用      仓库管理器有两个服务目的:首先它的角色是一个高度可配置的介于你的组织与公开Maven仓

相关阅读排行


用户评论

游客

相关内容推荐

最新文章

×

×

请激活账号

为了能正常使用评论、编辑功能及以后陆续为用户提供的其他产品,请激活账号。

您的注册邮箱: 修改

重新发送激活邮件 进入我的邮箱

如果您没有收到激活邮件,请注意检查垃圾箱。