在管理员模式下启动命令行,并导航到位于C:\ tools \ nexus \ nexus-2.10.0-02下的bin文件夹。然后运行命令nexus install。您将看到成功消息,如图8-1所示。这将安装使Jetty运行的本机服务包装器。
图8-1。 安装Nexus时显示成功消息
注意Nexus 2.10需要JRE 1.7才能正常工作。 确保您的本地计算机上安装了1.7版本的JDK / JRE。 此外,请确保JAVA_HOME指向JDK的版本1.7。
在同一命令行上,运行命令nexus start启动Nexus。 运行此命令的结果如图8-2所示。
图8-2。 启动Nexus
默认情况下,Nexus在端口8081上运行。启动Web浏览器并导航到位于http:// localhost:8081 / nexus的Nexus。 图8-3显示了Nexus启动屏幕。 使用用户名admin和密码admin123登录和浏览Nexus。
清单8-1。具有distributionManagement的pom.xml
4.0.0
nexusReleases
Releases
http://localhost:8081/nexus/content/repositories/releases
nexusSnapshots
Snapshots
http://localhost:8081/nexus/content/repositories/snapshots
Note开箱即用,Nexus附带了Releases和Snapshots存储库。默认情况下,SNAPSHOT工件将存储在Snapshots Repository中,而发布工件将存储在Releases存储库中。
nexusReleases
deployment
deployment123
nexusSnapshots
deployment
deployment123
以下是与Nexus交互的配置步骤。在命令行中,在目录C:\ apress \ gswm-book \ chapter8 \ gswm下运行命令mvn deploy。成功执行命令后,您将在Nexus下的http:// localhost:8081 / nexus / content / repositories / snapshots / com / apress / gswmbook / gswm / 1.0.0-SNAPSHOT /下看到SNAPSHOT工件,如图所示图8-4。
项目发布
发布项目是一个复杂的过程,它通常包括以下步骤:
验证本地机器上没有未提交的更改。
从pom.xml文件中的版本中删除SNAPSHOT。
确保项目未使用任何SNAPSHOT依赖项。
检入修改的pom.xml文件到您的源代码控制。
创建源代码的源代码控制标签。
构建新版本的工件,并将其部署到存储库管理器。
增加trunk的pom.xml文件中的版本,并准备下一个开发周期。
Maven有一个发布插件,它提供了一个标准机制来执行上述步骤并释放项目工件。正如你所看到的,作为发布过程的一部分,Maven与源代码控制系统进行了大量的交互。在本节中,您将使用Subversion(SVN)作为源代码控制系统。 Maven和SVN之间的典型交互如图8-5所示。 SVN服务器包含包含企业项目的存储库。 Maven版本通常在开发人员或构建机器上执行。 Maven需要在这样的机器上安装SVN命令行工具。 SVN命令行工具允许Maven与SVN交互并执行诸如检出代码,创建标签等操作。
图8-5。 Maven和Subversion之间的交互
在深入了解Maven发布过程之前,您需要完成以下步骤,使本地机器准备就绪:
在本地机器上安装Subversion服务器和SVN命令行工具。
创建Subversion存储库。
检查您将要使用到存储库中的项目。
Subversion Server命令行工具安装
有几个开源项目或商业公司提供SVN服务器。在这个项目中,您将使用VisualSVN中的Subversion服务器。
通过从www.visualsvn.com/downloads/下载64位VisualSVN Server可执行文件来启动安装过程。从图8-6可以看出,服务器可执行文件与SVN命令行工具捆绑在一起。
图8-6。下载VisualSVN服务器
注意企业通常将Subversion安装在集中式服务器上并可供使用。如果您已经具有对Subversion服务器的读/写访问权限,则可以跳过Subversion服务器安装步骤。但是,您需要在执行Maven发行版的计算机上安装SVN命令行工具。我们建议VisualSVN的“Apache Subversion命令行工具”,您可以从www.visualsvn.com/downloads/下载和安装。
下载后,双击VisualSVN-Server-3.0.0-x64.exe安装文件启动安装屏幕。接受最终用户许可协议,在随后的屏幕上,确保选中“VisualSVN服务器和管理控制台”,并选中“将PND环境变量添加到Subversion命令行工具”选项,如图8所示-7。
图8-7。 VisualSVN服务器设置
VisualSVN服务器有两种类型:标准版和企业版。标准版提供的功能将满足您在本章中的需求。单击VisualSVN服务器版本屏幕上的标准版按钮。在以下屏幕上,取消选中使用安全连接复选框,如图8-8所示。
图8-8。安装和存储库位置
在下一个屏幕上,单击安装按钮开始安装。成功安装SVN服务器后,请确保SVN命令行工具已正确安装。为此,请打开一个新命令行并运行命令svn help。您应该看到类似于图8-9所示的输出。
图8-9。运行svn help命令后输出
创建存储库
Subversion存储库用于管理文件和文件夹,并跟踪对这些文件和文件夹所做的任何修改。 VisualSVN提供了一个伟大的图形用户界面工具,称为VisualSVN服务器管理器,这使得库的创建和管理轻而易举。在Windows机器上,转到所有程序VisualSVN并启动VisualSVN服务器管理器。按照以下步骤创建新存储库:
在服务器管理器的存储库部分下,单击创建新存储库链接。
在“存储库类型”屏幕中选择常规FSFS存储库选项。点击下一步。
在图8-10中,输入gswm作为存储库名称。点击下一步。
图8-10。存储库创建
在“存储库结构”屏幕中选择单项目存储库选项,如图8-11所示。点击下一步。
图8-11。新的存储库结构
在“资源库访问权限”屏幕中,接受默认的“所有Subversion用户都具有读/写访问权限”。单击创建。应显示已创建存储库成功消息。单击“完成”。
获取存储库的最后一步是创建一个在gwsm-book存储库上具有读/写访问权限的新用户。按照以下步骤创建新用户:
在VisualSVN服务管理器主屏幕上,单击“Subversion身份验证”部分中的创建新用户链接,如图8-12所示。
图8-12。 Subversion认证部分
在“新建用户”窗口中,输入gswm作为用户名,gswm作为密码,如图8-13所示。单击“确定”。
图8-13。新建Subversion用户
检查源代码
使您的计算机准备好Maven发布的最后一步是将C:\ apress \ gswm-book \ chapter8 \ gswm下的gswm项目检入新创建的存储库。使用命令行,导航到C:\ apress \ gswm-book \ chapter8 \ gswm文件夹,并按顺序运行以下命令:
svn checkout http:// localhost / svn / gswm / trunk / C:/ apress / gswm-book / chapter8 / gswm --username gswm --password gswm
svn add src
svn add pom.xml
svn commit -m“Inital commit”
运行上述命令的输出如图8-14所示。
图8-14。输出从svn初始提交
使用浏览器,导航到http:// localhost / svn / gswm / trunk。出现提示时,输入用户名gswm和密码gswm,您将看到签入的代码。图8-15显示了预期的浏览器屏幕。
图8-15。项目签入SVN
Maven发布
使用Maven的发布过程释放工件需要使用两个重要目标:prepare和perform。此外,发布插件提供了一个干净的目标,当事情出错时派上用场。
准备目标
准备目标,顾名思义,准备一个项目发布。作为此阶段的一部分,Maven执行以下操作:
check-poms:检查pom.xml文件中的版本是否包含SNAPSHOT。
scm-check-modifications:检查是否有任何未提交的更改。
check-dependency-snapshots:检查pom文件以查看是否存在任何SNAPSHOT依赖性。这是一个最佳实践,您的项目使用已发布的依赖关系。 pom.xml文件中发现的任何SNAPSHOT依赖项都将导致发布失败。
map-release-versions:当以交互方式运行prepare时,会提示用户提供发布版本。
map-development-versions:当在交互式模型中运行prepare时,会提示用户下一个开发版本。
generate-release-poms:生成发布pom文件。
scm-commit-release:提交将pom文件发布到SCM。
scm-tag:为SCM中的代码创建发布标签。
rewrite-poms-for-development:为新的开发周期更新pom文件。
remove-release-poms:删除为版本生成的pom文件。
scm-commit-development:提交带有开发版本的pom.xml文件。
end-release:完成发布的准备阶段。
为了方便实现,您将在项目的pom.xml文件中提供SCM信息。清单8-3显示了带有SCM信息的pom.xml文件片段。
清单8-3。带有SCM信息的pom.xml
4.0.0
scm:svn:http://localhost/svn/gswm/trunk
scm:svn:http://localhost/svn/gswm/trunk
http://localhost/svn/gswm/trunk
nexusReleases
deployment
deployment123
nexusSnapshots
deployment
deployment123
localhost
gswm
gswm
现在,您具有Maven准备目标所需的整个配置。 清单8-5显示了运行准备目标的结果。 因为准备目标是以交互模式运行的,Maven将提示您提供发布版本,发布标签或标签以及新的开发版本。 通过对每个提示按Enter键接受Maven的建议默认值。
清单8-5。 Maven准备命令
C:\apress\gswm-book\chapter8\gswm>mvn release:prepare
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Getting Started with Maven 1.0.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-release-plugin:2.3.2:prepare (default-cli) @ gswm ---
[INFO] Verifying that there are no local modifications...
[INFO] ignoring changes on: **\release.properties, **\pom.xml.next, **\pom.xml.releaseBackup, **\pom.xml.backup, **\pom.xml.branch, **\pom.xml.tag
[INFO] Executing: cmd.exe /X /C "svn --username gswm --password ***** --no-auth-cache --non-interactive status"
[INFO] Working directory: C:\apress\gswm-book\chapter8\gswm
[INFO] Checking dependencies and plugins for snapshots ...What is the release version for "Getting Started with Maven"? (com.apress.gswmbook:gswm) 1.0.0: :What is SCM release tag or label for "Getting Started with Maven"? (com.apress.gswmbook:gswm) gswm-1.0.0: :What is the new development version for "Getting Started with Maven"? (com.apress.gswmbook:gswm) 1.0.1-SNAPSHOT: :
[INFO] Transforming 'Getting Started with Maven'...---------------------------------------------------------------
[INFO]
[INFO] Building jar: C:\apress\gswm-book\chapter8\gswm\target\gswm-1.0.0.jar
[INFO]
[INFO] ------------------------------------------------------------------
[INFO]
[INFO] BUILD SUCCESS
[INFO]
[INFO] ------------------------------------------------------------------
[INFO]
[INFO] Total time: 1.654 s
[INFO]
[INFO] Finished at: 2014-10-22T23:10:44-06:00
[INFO]
[INFO] Final Memory: 11M/27M
[INFO]
[INFO] ------------------------------------------------------------------
[INFO] Checking in modified POMs...
[INFO] Executing: cmd.exe /X /C "svn --username gswm --password ***** --no-auth-cache --non-interactive commit --file C:\Users\<>\AppData\Local\Temp\maven-scm-203076178.commit --targets C:\Users\<>\AppData\Local\Temp\maven
scm-5496549062663519106-targets"
[INFO] Working directory: C:\apress\gswm-book\chapter8\gswm
[INFO] Tagging release with the label gswm-1.0.0...
[INFO] Executing: cmd.exe /X /C "svn --username gswm --password ***** --no-auth-cache --non-interactive copy --file C:\Users\<>\AppData\Local\Temp\maven-scm-85876759.commit --revision 6 http://localhost/svn/gswm/trunk http://localhost/svn/gswm/tags/gswm-1.0.0"
[INFO] Working directory: C:\apress\gswm-book\chapter8\gswm
[INFO] Transforming 'Getting Started with Maven'...
[INFO] Not removing release POMs
[INFO] Checking in modified POMs...
[INFO] Executing: cmd.exe /X /C "svn --username gswm --password ***** --no-auth-cache --non-interactive commit --file C:\Users\<>\AppData\Local\Temp\maven-scm-112170711.commit --targets C:\Users\<>\AppData\Local\Temp\maven-scm-2440605286339680080-targets"
[INFO] Working directory: C:\apress\gswm-book\chapter8\gswm
[INFO] Release preparation complete.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 33.711 s
[INFO] Finished at: 2014-10-22T23:10:44-06:00
[INFO] Final Memory: 7M/17M
[INFO] ------------------------------------------------------------------------
注意,svn命令作为准备目标的一部分被执行。成功完成准备目标将导致创建SVN标记,如图8-17所示。 gswm项目中的pom.xml文件现在将具有版本1.0.1-SNAPSHOT
C:\apress\gswm-book\chapter8\gswm>mvn release:perform
[INFO] Scanning for projects...
[INFO]
[INFO] ----------------------------------------------------------
[INFO] Building Getting Started with Maven 1.0.1-SNAPSHOT
[INFO] ----------------------------------------------------------
[INFO]
[INFO] --- maven-release-plugin:2.3.2:perform (default-cli) @ gswm ---
[INFO] Checking out the project to perform the release ...
[INFO] Executing: cmd.exe /X /C "svn --username gswm --password ***** --no-auth-cache --non-interactive checkout http://localhost/svn/gswm/tags/gswm-1.0.0 C:\apress\gswm-book\chapter8\gswm\target\checkout"
[INFO] Working directory: C:\apress\gswm-book\chapter8\gswm\target---------------------------------
[INFO]
[INFO] Installing C:\apress\gswm-book\chapter8\gswm\target\checkout\target\gswm-1.0.0.jar to C:\Users\<>\.m2\repository\com\apress\gswmbook\gswm\1.0.0\gswm-1.0.0.jar
[INFO]
[INFO] Installing C:\apress\gswm-book\chapter8\gswm\target\checkout\pom.xml to C:\Users\<>\.m2\repository\com\apress\gswmbook\gswm\1.0.0\gswm-1.0.0.pom sources.jar to C:\Users\<>\.m2\repository\com\apress\gswmbook\gswm\1.0.0\gswm-1.0.0-sources.jar
[INFO]
[INFO] Installing C:\apress\gswm-book\chapter8\gswm\target\checkout\target\gswm-1.0.0-javadoc.jar to C:\Users\<>\.m2\repository\com\apress\gswmbook\gswm\1.0.0\gswm-1.0.0-javadoc.jar
[INFO]
[INFO]
[INFO]
[INFO] --- maven-deploy-plugin:2.7:deploy (default-deploy) @ gswm ---
[INFO] Uploading: http://localhost:8081/nexus/content/repositories/releases/com/apress/gswmbook/gswm/1.0.0/gswm-1.0.0.jar
[INFO] 2/3 KB
[INFO] 3/3 KB
[INFO]
[INFO] Uploaded: http://localhost:8081/nexus/content/repositories/releases/com/apress/gswmbook/gswm/1.0.0/gswm-1.0.0.jar (3 KB at 13.4 KB/sec)
[INFO] Uploading: http://localhost:8081/nexus/content/repositories/releases/com/apress/gswmbook/gswm/1.0.0/gswm-1.0.0.pom
[INFO] 2/3 KB
[INFO] 3/3 KB
[INFO]
[INFO] Uploaded: http://localhost:8081/nexus/content/repositories/releases/com/apress/gswmbook/gswm/1.0.0/gswm-1.0.0.pom (3 KB at 14.5 KB/sec)
[INFO] Downloading: http://localhost:8081/nexus/content/repositories/releases/com/apress/gswmbook/gswm/maven-metadata.xml
[INFO]
[INFO] Uploaded: http://localhost:8081/nexus/content/repositories/releases/com/apress/gswmbook/gswm/1.0.0/gswm-1.0.0-javadoc.jar (35 KB at 368.5 KB/sec)
[INFO]
[INFO] BUILD SUCCESS
[INFO]
[INFO] ----------------------------------------------------
[INFO]
[INFO] Total time: 3.807 s
[INFO]
[INFO] Finished at: 2014-10-22T23:26:36-06:00
[INFO]
[INFO] Final Memory: 17M/42M
[INFO]
[INFO] ----------------------------------------------------
[INFO] Cleaning up after release...
[INFO] -----------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] -----------------------------------------------------------
[INFO] Total time: 5.867 s
[INFO] Finished at: 2014-10-22T23:26:36-06:00
[INFO] Final Memory: 8M/19M
[INFO] -----------------------------------------------------------
这完成了1.0.0版本的gswm项目的发布。 该工件最终会出现在Nexus存储库管理器中,如图8-18所示
图8-18。 Nexus与已发布的工件神器
总结
Nexus等内部存储库管理器允许企业完全采用Maven。 除了担当公共存储库代理之外,它们还支持组件共享和治理。 本章讨论将Maven与Nexus整合,并指导您完成将工件部署到Nexus的过程。 您还学习了Maven的发布过程及其不同的阶段。