- 浏览: 325550 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
大菜头:
<div class="quote_title ...
JForum 2.1.8 中文乱码问题 -
shenxielangzi:
折腾半天呀,也是这个问题。疯了
java.sql.SQLException: ORA-00911: 无效字符 -
v4S9vdHc:
这应该是说 return 要在函数体内
SyntaxError: 'return' outside function -
chjh_721:
Supported Values for @SuppressWarnings -
zhanyingle_1981:
哈哈,同道中人
java.sql.SQLException: ORA-00911: 无效字符
来源:http://forearrow.iteye.com/blog/171385
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’中的配置:
- <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>
<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>
启动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>
<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>
<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> <发表评论
-
org.hibernate.QueryException: in expected错误
2011-10-20 16:18 1586错误信息:org.hibernate.QueryExcepti ... -
Oracle 是不支持主键自增
2011-04-23 08:59 1311今天遇到一个问题,以为oracle 是支持主键自增的,结果程序 ... -
hibernate 插入Date字段 时分秒丢失
2011-04-23 08:51 2256Oracle 中如果字段类型是Date,在使用JBoss JP ... -
JBoss启动异常: Port already in use: 1098
2010-05-11 12:44 5824JBoss启动异常: Port already in use: ... -
caused by: java.lang.NoSuchMethodError: javassist.scopedpool.ScopedClassPool.
2010-03-31 14:27 2576今天用testng 跑case时发现 caused b ... -
java.sql.SQLException: ORA-00911: 无效字符
2010-02-01 16:25 5840今天在用原生sql, jdbc操作数据库时老有问题: java ... -
Hudson : pending-waiting for next available executor问题
2009-12-24 10:58 4218今天上午发现测试用的job没有起来, 通过hudson 的we ... -
这几天跑持续集成的Function Test遇到的问题s
2009-12-17 17:37 2771这几天在弄持续集成功能测试的东西,遇到了两三个奇怪的问题,真的 ... -
Maven Profiles
2009-12-09 17:32 1649From: http://www.sonatype.co ... -
maven依赖关系中Scope的作用
2009-12-09 16:24 1427转载:http://peak.iteye.com/blog/2 ... -
mvn install:install文件名中需要不出现空格
2009-12-07 10:01 1969mvn install:install-file -Dgrou ... -
mvn 长命令
2009-12-06 10:08 1052mvn archetype:create -DgroupId ... -
JPA Query 注意事项一
2009-11-11 18:33 36511. 错误: org.hibernate.QueryPara ... -
java.lang.IllegalArgumentException: id to load is required for loading
2009-11-11 16:08 2100java.lang.IllegalArgumentExcept ... -
'Starting JBoss v5.0 at localhost' has encountered a problem
2009-11-05 22:04 4845eclipse中启动jboss5时提示:Server JBos ... -
JUnit 4 Vs TestNG – Comparison
2009-11-04 13:13 1439http://www.mkyong.com/unitte ... -
Supported Values for @SuppressWarnings
2009-11-03 16:22 2428http://www.breakitdownblog.com/ ...
相关推荐
Artifactory作为Maven仓库管理器,可以作为内部私有仓库,用于存储和管理组织内的自定义组件,同时也可以作为代理仓库,缓存公共的Maven中央仓库内容,减少网络延迟。 设置Artifactory的Maven2组件库分为以下几个...
设置Maven仓库-Artifactory Maven 是 Java 开发者中流行的构建工具,可以帮助减少构建应用程序时所依赖的软件构件的副本。Maven 建议的方法是将所有软件构件存储于一个叫做 repository 的远程仓库中。设置内部 ...
Maven仓库是Java开发中至关重要的一个组成部分,它是一个集中存储各种软件构件(如JAR包)的中央仓库,便于开发者获取、管理和分享依赖。Maven通过配置项目构建的POM.xml文件,能够自动从仓库中下载所需的jar包,极...
此外,Artifactory提供了一种方便的方式,用于上传自定义的library到本地或远程Maven仓库,确保团队内部的一致性和可重复性。 **Android Library上传** 在Android开发中,有时我们需要创建自己的库(library)供多...
1. 使用代理服务器:对于企业环境,可以通过配置Maven使用内部的Nexus或Artifactory等代理服务器,以减少对外部网络的依赖。 2. 清理仓库:定期删除不再使用的旧版本库,避免空间浪费。 3. 镜像中央仓库:设置镜像...
在进行大型项目开发时,可能需要设置私有 Nexus 或 Artifactory 仓库,以便更好地管理和分发内部库。这些私有仓库可以作为Maven的代理,将所有下载的公共库镜像到本地,进一步提高效率并保护公司的知识产权。 除了...
"nexus-maven-repository-index.zip" 这个文件通常是由Nexus或Artifactory等Maven仓库管理器生成的,它们会定期或按需构建仓库索引,以便开发者能够更高效地使用。Nexus是Sonatype公司提供的开源仓库管理工具,它...
私有Maven仓库的设置和管理通常涉及到Nexus、Artifactory等工具,具体操作会根据所使用的工具有所不同。 总的来说,当中央Maven仓库找不到特定的依赖时,开发者需要自行下载并管理这些依赖。对于JxBrowser,这个...
本地仓库是Maven默认查找依赖的地方,而远程仓库则包含在Internet上的公共或私有存储库,如Central Repository或企业内部的Nexus或Artifactory。 由于网络条件或其他因素,有时从远程仓库下载依赖可能会遇到困难,...
4. **代理仓库**:如果企业内网无法直连互联网,可以设置私有的Nexus或Artifactory等代理仓库,它们可以定时同步中央仓库,供内部开发团队使用。 5. **自定义仓库**:在`settings.xml`中可以配置额外的远程仓库地址...
### Maven仓库管理详解 #### Maven仓库的基本概念 Maven 是一款强大的自动化构建工具,它能够帮助开发者自动处理项目的构建过程,包括编译、测试、打包、部署等环节。Maven 的核心特性之一便是其仓库系统,它使得...
3. **私有仓库**:对于企业内部的库或者不公开的依赖,可以设置私有仓库,如 Nexus 或 Artifactory。私有仓库可以缓存中央仓库的依赖,提高下载速度,同时也能存放公司内部项目。 ### 三、Maven 仓库配置 1. **pom...
7. **最佳实践**:对于公司内部使用的非公开库,最好创建一个私有的Maven仓库来托管这些依赖,以便团队成员可以共享和管理它们。这也有助于避免在不同项目间重复手动安装。 以上就是将ojdbc14手动发布到Maven仓库的...
在Android开发过程中,管理依赖库和发布自定义库到Maven仓库是常见的需求。这个名为"Android-支持上传多种maven仓库配置相关全部自动生成"的工具或框架旨在简化这一过程,让开发者无需手动配置繁琐的上传脚本,提高...
Nexus是一款流行的私有Maven仓库管理器,可以作为企业内部的镜像服务器、代理服务器和仓库。它支持多种仓库类型,如Maven2/3、Ivy、npm、NuGet等。通过Nexus,我们可以轻松地管理内部构件、创建虚拟仓库(聚合多个...
Nexus是Sonatype公司提供的一款强大的Maven仓库管理器,它不仅能够作为Maven的本地仓库,还可以作为代理仓库,甚至可以自定义私有仓库,为团队协作和持续集成提供高效的支持。本文将详细介绍Nexus的搭建过程,以及...