1. 介绍
Maven是Java开发者中流行的构建工具,Maven的好处之一是可以帮助减少构建应用程序时所依赖的软件构件的副本,Maven建议的方法是将所有软件构件存储于一个叫做repository的远程仓库中。
Maven会从ibiblio.org中的公用仓库中同步构件,这个公用仓库下载缓慢、不稳定,并且不包含一些构件的最新版本,而且不能上传团队私有的
构件。通过设置内部Maven仓库,团队可以更有好地利用Maven仓库的优势并且克服使用ibiblio上的仓库时的缺点。
本文着眼于Maven仓库工具应提供的一些功能,列出了选择Maven仓库工具的标准,说明了使用Artifactory设置Maven仓库的相关步骤。
在Linux和Windows中设置Maven仓库的过程是相同的,少数不同点在文中已经用高亮显示,本文列出了与这个Maven仓库的使用有关的POM
文件的范例,用截图来向用户阐述如何设置Maven仓库,Maven和artifactory配置范例也有列出。
1.1 背景知识
本文假定读者熟悉以下的概念和技术:
Maven 2
J2EE web 服务器部署过程(e.g. 在Tomcat中部署Web应用程序)
XML
1.2 Maven仓库的目的
Maven仓库的目的是作为团队内所使用的所有软件构件的内部私有构件仓库,将Maven构件(jar和pom)存储到一个专门的Maven仓库比将它们存储到版本控制系统中更有优势,这是因为:
构件(jar)是二进制文件,不属于版本控制系统,版本控制系统在处理文本文件方面比较好
保持较小的版本控制数据库
Checkout、update和其他版本控制的操作可以更快
1.3 建立内部私有仓库的优势:
减少可能的版本冲突
减少首次构建时需要的手动干涉
中央仓库包含所有依赖的软件构件,引用单一的中央仓库比引用多个独立的本地库要好
使用内部仓库做clean构建时会快些,因为Maven构件是从内部服务器而不是从因特网上的ibiblio服务器获取。
1.4 Maven构件库的类型
本地仓库
——
位于开发者的机器,由开发者维护,它从位于‘~home/.m2’
目录的‘settings.xml’文件中定义的Maven仓库上同步,如果在pom.xml或setting.xml文件中没有设置内部私有远程仓库,
那么开发者机器上的这个本地仓库就会从ibiblio.org 上的公用Maven仓库上同步。
内部私有远程仓库
——这是我们将要设置的仓库,我们将改变maven 的pom.xml或settings.xml文件来使用这个库。
外部公用远程仓库
——这是在ibiblio.org上的外部公用仓库,默认情况下,Maven从这个仓库上同步。
2.Maven仓库概览
2.1 没有Maven仓库下的开发环境
2.2 具有团队内部远程仓库的开发环境
3. 本教程Maven仓库的用例介绍
在内部仓库中创建2个子库
Ibiblio 缓存‘Ibiblio-cache’ ——用于存储从ibiblio.org中下载的构件,可以公开访问,它将从外部的ibiblio仓库中同步
内部仓库internal-maven-repository——用于存储团队内部的构件,它不与任何外部仓库同步,是团队专有的构件库
可以创建另一个子仓库,这是可选的,用于存储那些公用的但是在ibiblio上暂时没有的构件,例如一些构件的新最版本,这个仓库不与内部仓库同步。我们可以称它为第三方‘3rd-party’
浏览远程库,最好是通过一个web浏览器
在仓库中搜索构件
从版本控制系统中下载代码,修改settings.xml指向内部仓库并且做一次没有任何手工干涉的clean构建
向仓库中安装一个构件的新版本
向仓库中大批导入构件
从仓库中大批导出构件
手动备份仓库,设置定时自动备份任务
4. Maven仓库工具的选择标准
理想的Maven仓库工具应该:
开放源码并且免费
提供管理工具
提供仓库浏览器——最好是web浏览器而不是桌面应用程序
可以部署到标准web服务器中——例如Apache或Tomcat
创建、编辑、删除子库的能力
批量导入/导出的工具,用来向构件库或从构件库移动构件
访问控制工具和匿名只读访问
安装和使用简单
备份功能
问题追踪,论坛或其他独立的信息来源
活跃的社区/开发者,这样产品才能改进,bug才能修正
5. 不同Maven仓库工具的比较
一些流行且免费的Maven仓库工具有:
标准Maven代理codehaus—— http://maven-proxy.codehaus.org/
Dead simple Maven Proxy (DSMP) - http://www.pdark.de/dsmp/
Proximity - http://proximity.abstracthorizon.org/
Artifactory - http://www.jfrog.org/sites/artifactory/latest/
下面列出了一个比较:
|
codehaus
|
DSMP
|
Proximity
|
Artifactory
|
管理工具
|
否 |
基本 |
是 |
是 |
构件库浏览器
|
基本 |
否 |
是 |
是 |
部署到标准Web服务器
|
是(不可配置) |
否 |
是 |
是(与Jetty绑定,支持Tomcat) |
子库管理
|
是 |
是 |
是 |
是 |
批量导入/导出构件
|
否 |
否 |
否 |
是 |
安装使用简单
|
是 |
是(从代码构建) |
是 |
是(AJAX界面) |
备份功能
|
否 |
否 |
否 |
是(使用quartz和cron表达式) |
问题追踪
|
JIRA,IRC |
|
Wiki issues Tracker |
Jira issues Tracker(良好的在线文档) |
研究过以上所有产品之后得出结论,Artifactory 拥有我们要的所有标准。Proximity看样子也有许多我们要的特性,我们将着眼于Artifactory 的使用。
关于Artifactory 的其他方面:
符合我们的需求
Apache 2.0 许可
运行于JDK 1.6和Tomcat 6。Artifactory以‘war’文件形式部署到Tomcat
使用Derby数据库来存储构件,数据以一个已发布的知名的格式存储
所有构件可以被批量导出到本地库然后导入到其他库,因而易于将构件从一个仓库工具移到另一个,它也使得Maven库的升级非常容易
兼容Java Content Repository 标准(JSR-170)。
使用Lucene作为搜索引擎,仓库可以被索引和重新索引
Ajax界面
易于定制界面
使用JIRA作为问题追踪系统
6. 设置Maven仓库
6.1 软件需求
Artifactory——从http://www.jfrog.org/sites/artifactory/latest/
下载和安装,当前最新版本是1.2.1-rc1,Artifactory是一个可以被安装到Tomcat中去的Web应用程序
JDK 1.6 – 更多信息请参阅http://www.jfrog.org/sites/artifactory/latest/install.html
Tomcat 6
6.2 目录结构
下载和解压artifactory。目录结构如下:
这些目录是:
backup ——
仓库的备份,可以使用cron表达式设置备份策略,quartz定时调度程序在指定的时间里运行备份任务,备份时间间隔在
‘ARTIFACTORY_INSTALLATION_FOLDER>/etc/artifactory.config.xml’文件中指定
bin ——内置jetty 服务器的运行批处理文件
data —— 包含derby数据库文件,如果你想以一个空的构件库开始,可以删除这个目录中的所有内容,在全新的artifactory 安装中,这个目录是空的。
etc —— artifactory 的配置文件,有‘artifactory.config.xml’ 、‘jetty.xml ‘和‘log4j.,properties’
lib —— 包含所有依赖的jar文件
logs —— 日志文件
webapps —— 包含war文件,它可以被拷贝到Tomcat中安装。
6.2 在Tomcat 6中部署
部署‘<ARTIFACTORY_INSTALLATION_FOLDER>/webapp’目录中的war文件到
‘<TOMCAT_INSTALLATION_FOLDER>/webapps’目录中,在jdk1.6和Tomcat
6环境下不需要改变tomcat的配置,Tomcat 6会检测并部署它。
当这个Web应用程序被部署的时候,需要这些信息:
保存构件的数据库的位置
artifactory 的xml配置文件的位置
备份目录的位置
可以在一个配置文件中指定所有3个信息,在Tomcat启动期间我们只需要指定artifactory的安装目录,artifactory会计算出其余
的信息。可选的方法是使用jdbc设置好derby数据库的连接并且在Web应用程序中配置好artifactory
(通过在Web应用程序中包含artifactory.config.xml文件)。不管怎样,这个方法是简单的。
artifactory 安装目录的位置可以被设置为一个环境变量,在Linux中,用‘.bash’来输出artifactory 安装目录的位置的脚本是:
export JAVA_OPTS = -Dartifactory.home=/home/amangat/artifactory-1.2.1-rc1
在Windows中,可以添加到Tomcat启动选项中:
6.3 设置Maven仓库
建议的方法是在我们的Maven仓库中创建3个库(或子库),它们是:
内部私有仓库private-internal-repository
:这个仓库包含仅在团队内使用的构件,它们由开发者手动上传,这个仓库不与ibiblio 中的远程仓库同步,因为这个仓库(或子仓库)中的构件是团队私有的。
第三方库3rd-party
:这个仓库包含公有的但不在ibiblio服务器上的构件,例如,最新版本的尚不在ibiblio的组件或jdbc驱动。这个仓库不与ibiblio 同步,因为ibiblio 没有这些jar。
Ibiblio 缓存Ibiblio-cache
:这个仓库与ibiblio 仓库同步,它是ibiblio 上的构件的缓存。
设置这三个仓库,需要修改<ARTIFACTORY_INSTALLATION_FOLDER>/etc/artifactory.config.xml’中的配置:
1. <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
2. xmlns="http://artifactory.jfrog.org/xsd/1.0.0"
3. xsi:schemaLocation="http://artifactory.jfrog.org/xsd/1.0.0
4. http://www.jfrog.org/xsd/artifactory-v1_0_0.xsd">
5. <!-- Backup every 12 hours -->
6. <!--<backupCronExp>0 0 /12 * * ?</backupCronExp>-->
7. <localRepositories>
8. <localRepository>
9. <key>private-internal-repository</key>
10. <description>Private internal repository</description>
11. <handleReleases>true</handleReleases>
12. <handleSnapshots>true</handleSnapshots>
13. </localRepository>
14. <localRepository>
15. <key>3rd-party</key>
16. <description>3rd party jars added manually</description>
17. <handleReleases>true</handleReleases>
18. <handleSnapshots>false</handleSnapshots>
19. </localRepository>
20. </localRepositories>
21. <remoteRepositories>
22. <remoteRepository>
23. <key>ibiblio</key>
24. <handleReleases>true</handleReleases>
25. <handleSnapshots>false</handleSnapshots>
26. <excludesPattern>org/artifactory/**,org/jfrog/**</excludesPattern>
27. <url>http://repo1.maven.org/maven2</url>
28. </remoteRepository>
29. </remoteRepositories>
30. </config>
启动Tomcat并且输入 http://localhost:8080/artifactor
下面是artifactory的首页面:
以用户名admin和密码password登录,点击浏览仓库的链接,你可以查看仓库的内容。
7.配置Maven以使用新的仓库
7.1 配置Maven的settings.xml 文件
Maven使用位于‘~/.m2/settings.xml’目录的settings.xml文件来获取Maven仓库 ,如果没有在该文件中指定仓库,Maven默认使用ibiblio.org上的仓库, settings.xml文件必须被修改以使用新的仓库:
<profiles>
<profile>
<id>dev</id>
<properties>
<tomcat5x.home>C:/InstalledPrograms/apache-tomcat-5.5.20</tomcat5x.home>
</properties>
<repositories>
<repository>
<id>central</id>
<url>http://localhost:8080/artifactory/repo</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
<repository>
<id>snapshots</id>
<url>http://localhost:8080/artifactory/repo</url>
<releases>
<enabled>false</enabled>
</releases>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>central</id>
<url>http://localhost:8080/artifactory/repo</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
<pluginRepository>
<id>snapshots</id>
<url>http://localhost:8080/artifactory/repo</url>
<releases>
<enabled>false</enabled>
</releases>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
7.2 使用pom.xml配置Maven
也可以在项目的pom.xml文件中设置仓库,下面是pom.xml范例文件:
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>test</groupId>
<artifactId>test</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>test</name>
<url>http://maven.apache.org</url>
<repositories>
<repository>
<id>central</id>
<url>http://localhost:8080/artifactory/repo</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
<repository>
<id>snapshots</id>
<url>http://localhost:8080/artifactory/repo</url>
<releases>
<enabled>false</enabled>
</releases>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>central</id>
<url>http://localhost:8080/artifactory/repo</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
<pluginRepository>
<id>snapshots</id>
<url>http://localhost:8080/artifactory/repo</url>
<releases>
<enabled>false</enabled>
</releases>
</pluginRepository>
</pluginRepositories>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
7.3 使用Maven构件仓库构建项目
在构建Maven项目的时候,所有的构件库都会从新的仓库下载,控件台会显示下载的过程:
用浏览器登录到新的构件仓库,你会发现artifactory 已经下载并缓存了ibiblio上的构件。
7.4 安装构件到构件仓库
可以通过Web界面或Maven命令行安装构件,通过Web界面来安装更简单更快,并且不需要修改任何配置。通过命令行安装需要修改settings.xml配置文件,可以在其他脚本中使用。
7.4.1 通过Web界面安装构件
安装步骤如下:
1. 上传要部署的构件(‘jar’ 文件 或 ‘pom’ 文件)
2. 如果你上传的是jar文件,Artifactory会为它创建pom文件 。上传的时候你可以指定上传到哪个仓库。
3. 上传完后,上传的构件与artifactory 自动创建的pom文件一起在仓库中出现。
7.4.1 能过Maven命令行安装构件
当用‘mvn clean install’ 命令的时候,Maven仅仅打包和安装构件到本地仓库,要把它安装到APH内部仓库中,我们必须在settings.xml中添加一条额外的配置:
<settings>
<servers>
<server>
<id>organisation-internal</id>
<username>admin</username>
<password>password</password>
</server>
</servers>
</settings>
安装构件到内部Maven仓库的命令是:
mvn deploy:deploy-file -DrepositoryId=organisation-internal -Durl=http://localhost:8080/artifactory/private-internal-repository
-DgroupId=test -DartifactId=test -Dversion=1.1 -Dpackaging=jar -Dfile=target/test-1.1.jar
repositoryId必须与settings.xml中定义的服务器ID相匹配,url必须包含构件将要被安装到的仓库的名称。
新的构件会在仓库中出现,并且artifactory 会自动为我们创建pom文件。
8. Artifactory 的其他特性
8.1 备份构件仓库
备份策略在 <ARTIFACTORY_INSTALLATION_FOLDER>/etc/artifactory.config.xml中指定,使用cron表达式来指定定时备份任务,配置备份任务的元素在下面的代码清单中用高亮显示出来了
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://artifactory.jfrog.org/xsd/1.0.0"
xsi:schemaLocation="http://artifactory.jfrog.org/xsd/1.0.0
http://www.jfrog.org/xsd/artifactory-v1_0_0.xsd">
<!-- Backup every 12 hours -->
<backupCronExp>0 0 /12 * * ?</backupCronExp>
<localRepositories>
<localRepository>
<key>private-internal-repository</key>
<description>Private internal repository</description>
<handleReleases>true</handleReleases>
<handleSnapshots>true</handleSnapshots>
</localRepository>
<localRepository>
<key>3rd-party</key>
<description>3rd party jars added manually</description>
<handleReleases>true</handleReleases>
<handleSnapshots>false</handleSnapshots>
</localRepository>
</localRepositories>
<remoteRepositories>
<remoteRepository>
<key>ibiblio</key>
<handleReleases>true</handleReleases>
<handleSnapshots>false</handleSnapshots>
<excludesPattern>org/artifactory/**,org/jfrog/**</excludesPattern>
<url>http://repo1.maven.org/maven2</url>
</remoteRepository>
</remoteRepositories>
</config>
备份文件存储在‘<ARTIFACTORY_INSTALLATION_FOLDER>/backups’目录,备份文件的格式与开发者机器上的本地仓库一致,这使得要移植仓库内容到其他Maven仓库工具中时非常容易。
8.2 其他特性
通过Web界面删除构件
通过Web界面搜索构件
批量导入/导出仓库中的所有构件
如果不要求使用Tomcat,可以使用内置的jetty服务器
9. 结论
内部私有Maven仓库加快构建的过程并且使clean构建更简单,它还帮助避免不同构件版本的冲突。
在这4款通用的Maven构件仓库工具中,看样子Artifactory 是比较好的产品。
Artifactory使得设置Maven仓库变得简单;它提供了一个好的Maven仓库工具应该实现的所有功能;团队不会被锁定在这个工具上,因为可
以容易地移植仓库内容到其他仓库工具上;对于不知道Maven仓库如何工作的人来说,Web界面使得他们能很容易地使用仓库。
分享到:
相关推荐
本篇文章将深入探讨如何使用Artifactory来管理内部Maven仓库。 首先,让我们了解Maven仓库的基本概念。Maven是一个广泛使用的Java项目管理和综合工具,它通过依赖管理简化了构建过程。Maven仓库存储项目的依赖项,...
Artifactory作为Maven仓库管理器,可以作为内部私有仓库,用于存储和管理组织内的自定义组件,同时也可以作为代理仓库,缓存公共的Maven中央仓库内容,减少网络延迟。 设置Artifactory的Maven2组件库分为以下几个...
设置Maven仓库-Artifactory Maven 是 Java 开发者中流行的构建工具,可以帮助减少构建应用程序时所依赖的软件构件的副本。Maven 建议的方法是将所有软件构件存储于一个叫做 repository 的远程仓库中。设置内部 ...
"nexus-maven-repository-index.zip" 这个文件通常是由Nexus或Artifactory等Maven仓库管理器生成的,它们会定期或按需构建仓库索引,以便开发者能够更高效地使用。Nexus是Sonatype公司提供的开源仓库管理工具,它...
Maven仓库是Java开发中至关重要的一个组成部分,它是一个集中存储各种软件构件(如JAR包)的中央仓库,便于开发者获取、管理和分享依赖。Maven通过配置项目构建的POM.xml文件,能够自动从仓库中下载所需的jar包,极...
总之,"上传本地maven仓库实例项目"教会我们如何利用Maven和Artifactory有效地管理自定义的Android library,使得代码复用和协作变得更加简单。通过这个过程,开发者可以更好地理解Maven的工作原理,以及如何在企业...
1. 使用代理服务器:对于企业环境,可以通过配置Maven使用内部的Nexus或Artifactory等代理服务器,以减少对外部网络的依赖。 2. 清理仓库:定期删除不再使用的旧版本库,避免空间浪费。 3. 镜像中央仓库:设置镜像...
私有Maven仓库的设置和管理通常涉及到Nexus、Artifactory等工具,具体操作会根据所使用的工具有所不同。 总的来说,当中央Maven仓库找不到特定的依赖时,开发者需要自行下载并管理这些依赖。对于JxBrowser,这个...
Maven是Java开发中广泛使用的构建工具,它管理项目依赖、构建流程,并且具有强大的插件系统。Maven的本地仓库是Maven系统的核心组件之一,它存储了项目所需的jar包和其他依赖,使得在构建项目时可以快速访问这些资源...
当一个项目运行`mvn install`命令时,Maven会将该项目的编译结果(如JAR文件)安装到本地仓库,使得其他项目可以通过依赖管理直接使用。 描述中提到的“maven的本地仓库jar包”可能是指一个包含各种常用库的压缩...
在这个“fixflow maven仓库文件”中,我们主要关注的是FixFlow 5.2版本在Maven仓库中的相关依赖。 在开发Java应用时,尤其是使用FixFlow作为工作流引擎时,开发者通常需要通过Maven来获取FixFlow的库文件。Maven...
### Maven仓库管理详解 #### Maven仓库的基本概念 Maven 是一款强大的自动化构建工具,它能够帮助开发者自动处理项目的构建过程,包括编译、测试、打包、部署等环节。Maven 的核心特性之一便是其仓库系统,它使得...
本文将详细介绍 Maven 的安装以及仓库的概念和使用。 ### 一、Maven 安装 1. **下载 Maven**:首先,你需要从 Maven 的官方网站(https://maven.apache.org/download.cgi)下载最新版本的 Maven。选择适合你操作...
4. **发布到私有Maven仓库**:如果你有一个私有的Maven仓库(如Nexus或Artifactory),你可以使用`deploy:deploy-file`命令将其发布到那里。配置仓库URL、用户名和密码,然后执行类似如下命令: ``` mvn deploy:...
Nexus是一款流行的私有Maven仓库管理器,可以作为企业内部的镜像服务器、代理服务器和仓库。它支持多种仓库类型,如Maven2/3、Ivy、npm、NuGet等。通过Nexus,我们可以轻松地管理内部构件、创建虚拟仓库(聚合多个...
Nexus是Sonatype公司提供的一款强大的Maven仓库管理器,它不仅能够作为Maven的本地仓库,还可以作为代理仓库,甚至可以自定义私有仓库,为团队协作和持续集成提供高效的支持。本文将详细介绍Nexus的搭建过程,以及...
Maven 是一个强大的项目管理工具,尤其在Java开发领域中被广泛使用。它自动化了构建、依赖管理和项目信息管理,极大地提高了开发效率。本文将深入探讨 Maven 仓库的概念,以及它在软件开发过程中的核心作用。 1. ...