Apache Archiva 的仓库配置

Archiva 有两种类型的仓库配置: managed repository 和 remote repository。
+ managed repository
位于运行 Archiva 服务器的本地仓库。它可以作为一个代理仓库,内部部署仓库或者本地镜像仓库。
Managed repostitory 的字段:
identifier – 仓库的ID,必须是唯一的。
name – 仓库的名字。
directory – 仓库的位置。如果指定的路径不存在, 将由archiva创建一个。
index directory – Archiva 生成的索引存放的位置。如果没有指定,索引目录(.indexer)将在仓库的根目录创建。
type – 仓库的布局(maven2 或者 maven 1)
cron – 执行仓库扫描的cron计划
repository purge by days older – 仓库净化的第一个选项。根据天数来净化。值为0,则不使用。最大值为1000。
repostiory purge by retention count – 仓库净化的第二个选项。根据保留数量净化。保留指定数量的snapshots。
releases included – 指定仓库中是否含有 released artifacts。
block re-deployment of released artifacts – 当released artifact存在时,是否允许覆盖。仅仅影响非snapshot的部署。
snapshots-included – 指定仓库中是否保存snapshots。
scannable – 指定仓库是否能被扫描,表示它是个本地仓库,能被索引,浏览,净化等等。
delete released snapshots – 在仓库净化时,是否删除有 released 对应的snapshot。
每一个仓库都有自己的Webdav URL,用户可以通过浏览器访问仓库。URL的格式如下:
http://[URL TO ARCHIVA]/repository/[REPOSITORY ID] (e.g. http://localhost:8080/archiva/repository/releases).
POM 的 <distributionManagement>段可以被复制和粘贴到一个项目的pom,这个项目可以发布到指定的managed repository。  从另一个方面来讲,在构建项目时,<repository> 段可以复制和粘贴到一个项目的pom或者Maven的setting.xml,告诉 Maven 从 managed repository 那里或者 artifacts。
+ remote repository
远程仓库,就是位于远程的仓库。这些仓库通常是代理仓库。参考 Proxy Connectors 看看如何代理一个仓库。
远程仓库字段:
identifier – 远程仓库的ID
name – 远程仓库的名字
url 远程仓库的URL。也可以使用 file:// 格式的URL来代理一个本地的仓库。注意如果本地仓库是一个archiva的managed repository,并且拥有一些 proxies connectors ,这些连接器将不会被触发。
username – 访问远程仓库的用户名(如果需要认证)
password – 访问远程仓库的密码(如果认证需要)
type – 远程仓库的布局(maven 2 或者 maven 1)
+ 扫描一个仓库
可以按计划扫描仓库,或者可以在repositories页面点击 “Scan Repository Now“来明确执行。
缺省只处理新(最后一次扫描为准)的artifacts。可以指定执行扫描全部artifacts。
对于scanner发现的每一个artifact,由不同的consumers处理,这些consumers包括 indexing, reository purge 和 database update。
+ 仓库净化
按天数净化
按保留数量净化
可以通过配置,当有released时,删除snapshot
+ 扫描一个数据库
跟仓库扫描一样,可以按计划或者明确执行。在“数据库”页面配置,”Database – Unprocessed Artifacts Scanning’ 段。
在扫描完仓库后,扫描数据库是必须的,artifacts的pom信息将被consumers轮番处理后,增加到数据库。
Posted in Archiva | Leave a comment

Maven 密码加密

1. 介绍
2. 如果创建一个主密码
3. 如果加密服务器密码
4. 如何将主密码保存到可移动设备上
5. Tips
介绍
Maven 2.1.0+ 现在支持服务器密码加密。主要用于下面的情况:
• 多用户共享同一个建造机器 (Server, CI box)
• 一部分用户可以部署Maven 成品到仓库,另一部分不能。
∘ 这关系到一些服务器操作,需要认证,不仅仅发布
• settings.xml 被用户共享
已实现的解决方案增加下面的能力:
• 已认证的用户拥有一个额外的 settings-security.xml 文件,位于他们的 ~/.m2 文件夹
∘ 这个文件包含加密后的主密码,用于加密其他的密码
∘ 或者包含一个 relocation – 引用到另一个文件,可能在可移动设备上
∘ 这个密码现在通过命令行接口第一次创建
• settings.xml里面的server条目拥有 passwords 和/或 keystore passphrases 加密
∘ 现在 – 在主密码被创建和保存在相应位置后,可以通过命令行接口完成。
如何创建一个主密码
使用下面的命令行:
mvn –encrypt-master-password <password>
这个命令将生成一个加密后的密码,结构类似如下:
{jSMOWnoPFgsHVpMvz5VrIt5kRbzGpI8u+9EF1iFQyJQ=}
将这个密码保存在 ~/.m2/settting-security.xml, 内容如下:
<settingsSecurity>
<master>{jSMOWnoPFgsHVpMvz5VrIt5kRbzGpI8u+9EF1iFQyJQ=}</master>
</settingsSecurity>
这完成后,你可以开始加密已有的服务器密码了。
如何加密服务器密码
你需要用下面的命令行:
mvn –encrypt-password <password>
这个命令会生成加密后的密码,类似于:
{COQLCE6DU6GtcS5P=}
复制并粘贴到你的 settings.xml 文件的 server 段。结果类似下面:
<settings>
<servers>
<server>
<id>my.server</id>
<username>foo</username>
<password>{COQLCE6DU6GtcS5P=}</password>
</server>
</servers>
</settings>
请注意,密码可以在花括号外面包含其他的信息,因此类似下的内容也可以使用:
<settings>
<servers>
<server>
<id>my.server</id>
<username>foo</username>
<password>Oleg reset this password on 2009-03-11, expires on 2009-04-11 {COQLCE6DU6GtcS5P=}</password>
</server>
</servers>
</settings>
那么,你现在可以 use,say,deploy 插件,来写到这个服务器上:
mvn deploy:deploy-file -Durl=https://maven.corp.com/repo -DrepositoryId=my.server -Dfile=you-artifact-1.0.jar
如何在移动设备上保存主密码
如上面描述的那样创建主密码,内容类似如下:
<settingsSecurity>
<master>{jSMOWnoPFgsHVpMvz5VrIt5kRbzGpI8u+9EF1iFQyJQ=}</master>
</settingsSecurity>
保存到你的移动设备上的某一个位置,如移动设备挂载到 /Volumes/mySecureUsb ,那么文件保存为 /Volumes/mySecureUsb/secure/settings-security.xml 。
然后创建文件 ~/.m2/settings-security.xml 包含下面的内容:
<settingsSecurity>
<relocation>/Volumes/mySecureUsb/secure/settings-security.xml</relocation>
</settingsSecurity>
确保操作系统挂载该移动设备后,加密的方式可以正常工作。
Tips
密码加密后,字符串里面有花括号,需要使用字符 ‘\’ 进行转义。
如:
jSMOWnoPFgsHVpMvz5VrIt5kRbzGpI8u+{EF1iFQyJQ=
转义:
{jSMOWnoPFgsHVpMvz5VrIt5kRbzGpI8u+\{EF1iFQyJQ=}
Posted in Maven | Leave a comment

在amd64架构上启动 Apache Archiva 1.3 遇到的问题

执行 archiva console ,显示内容:
Running Apache Archiva…
eval: 1: /home/batman/opt/apache-archiva-1.3/bin/./wrapper-linux-x86-32: not found
看了bin/archiva这个脚本。我的是64位系统,理论上应该执行 wrapper-linux-x86-64 ,它却执行wrapper-linux-x86-32。这个脚本的逻辑有问题。根据它的思路,把 wrapper-linux-x86-32 改成不可执行就解决问题了。操作方法是 chmod a-x bin/wrapper-linx-x86-32 。
Posted in Archiva | Leave a comment

在 Tomcat 中安装 Continuum

介绍如何在Tomcat Web 容器上安装,部署,配置 Continuum。
+ 基本原理和原则
对于每一个版本的Tomcat,在你部署Continuum之前,都需要做下面的一些事情:
1. 使用Java JDK > 1.5.0_11
2. 增加一个 <Context> XML  段来定义 JNDI资源
3. JavaMail / Activation JAR 文件s
4. Apache Derby JAR 文件s
5. 配置 ${appserver.base} java 属性
首先定义JNDI资源
Continuuum 启动时,要求从web容器那里获得一些JNDI配置好的资源,两个JDBC数据源和一个JavaMail会话。
有三种方法定义这些资源:
1. 创建 $CATALINA_HOME/webapps/continuum/META-INF/context.xml,内含<Context>段
3. 创建 $CATALINA_HOME/conf/Catalina/localhost/continuum.xml,内含 <Context>段
3. 增加 <Context> 段到 $CATALINA_HOME/conf/server.xml 文件
下面是需要你提供的JNDI名字:
mail/Session
jdbc/continuum
jdbc/users
假定:
1. 你是Apache tomcat 管理员
2. 你本地25端口有SMTP服务器,无须登录/密码
3. 你使用的是嵌入的Apache Derby 数据库(没有外部数据库,否则过程很不一样 )
4. 对于 Tomcat, JavaMail 或者 Derby 的详细描述,请参考个字的项目网站
JavaMail / Activation JAR 文件s
注意: Continuum 需要 JavaMail 1.4 (或者更新的)
Tomcat 缺省不会包含任何版本的 JavaMail 或者 Activation JAR 文件s。作为 Tomcat 的管理员, 需要你去下载和把他们放置在lib目录下。
lib目录可以根据自己的情况进行选择,不强制指定。这里,我们把他们放在  $CATALINA_HOME/common/lib/ 目录。
直接下载 JAR 文件:
• JavaMail 1.4 – http://repo1.maven.org/maven2/javax/mail/mail/1.4/mail-1.4.jar
• Java Activation Framework 1.1 – http://repo1.maven.org/maven2/javax/activation/activation/1.1/activation-1.1.jar
Apache Derby JAR 文件s
注意: Continuum 1.2 和 Apache Derby 10.1.3.1 做过测试
Continuum缺省使用Derby维护Continuum指定的信息和用户/安全数据库。
你需要获得 derby.jar 和 derbytools.jar ,把他们放在你选择的 lib 目录下。
这里,我们放在 $CATALINA_HOME/common/lib/ 目录。
直接下载:
• derby-10.1.3.1.jar – http://repo1.maven.org/maven2/org/apache/derby/derby/10.1.3.1/derby-10.1.3.1.jar
• derbytools-10.1.3.1.jar – http://repo1.maven.org/maven2/org/apache/derby/derbytools/10.1.3.1/derbytools-10.1.3.1.jar
配置 appserver.base java 属性
Continuum 使用这个java 属性来决定他的日志输出位置。
具体格式是: -Dappserver.base=<SOMEWHERE>
利用 $CATALINA_HOME/bin/setenv.sh 脚本进行设置:
#!/bin/bash
# Keep the appserver.home and appserver.base values the same when running under Tomcat
export CATALINA_OPTS=”-Dappserver.home=$CATALINA_HOME -Dappserver.base=$CATALINA_HOME”
Tomcat 6.0.x
<Context path=”/continuum”
docBase=”/path/to/continuum-webapp-1.2.war”>
<Resource name=”jdbc/users”
auth=”Container”
type=”javax.sql.DataSource”
username=”sa”
password=”"
driverClassName=”org.apache.derby.jdbc.EmbeddedDriver”
url=”jdbc:derby:database/users;create=true” />
<Resource name=”jdbc/continuum”
auth=”Container”
type=”javax.sql.DataSource”
username=”sa”
password=”"
driverClassName=”org.apache.derby.jdbc.EmbeddedDriver”
url=”jdbc:derby:database/continuum;create=true” />
<Resource name=”mail/Session”
auth=”Container”
type=”javax.mail.Session”
mail.smtp.host=”localhost”/>
</Context>
Posted in Continuum | Leave a comment

Equinox 快速上手指南

获取和使用Equinox OSGi 实现
Equinox OSGi 框架的实现组成了EclipseRCP和IDE平台的支柱,实际上,它是一个完整独立的OSGi实现。 要运行 Equinox OSGi ,下载  org.eclipse.osgi JAR 或者在你的Eclise安装目录下找 <install location>/eclipse/plugins/org.eclipse.osgi_3.2.0_xxx.jar。一旦你有 Equinox 框架的 JAr,使用下面的命令行:
jar -jar org.eclipse.osgi_3.2.0.jar -console
一旦运行,你会看到提示符 osgi> ,这是等待你输入命令的OSGi控制台。输入 “?”,可以得到命令帮助提示。开始时,最感兴趣的命令是:
• install <bundle URL> – 安装指定URL的bundle
• start <bundle # or bundle name> – 使用指定的序号或者符号ID启动 bundle
• stop <bundle # or bundle name> – 使用指定的序号或者符号ID停止 bundle
• ss – 报告所有已安装的bundle的摘要状态
• diag <bundle # or bundle name> –  使用指定的序号或者符号ID,报告bundle的resolution问题
配置和所有相关的
Equinox OSGi 实现是非常用配置的。一个最通用的配置方式是,让框架自动启动,然后安装和启动一组bundles。当你运行Eclipse IDE的时候,过程就是这样的。 这里说明它是怎么运行,你如何使用的问题。
加入你有B1.jar 和 B2.jar 两个bundles,你想在Equinox运行时安装和启动这两个bundles。 就是使用其他OSGi实现,你也可以通过控制台安装和运行B1.jar 和 B2.jar。这是个手动的过程,但是你只需要做一次(OSGi框架会记住已安装和启动的bundle)。要自动完成这些事情,穿件一个configuration,这里面列出要被安装和启动的B1.jar和B2.jar。设置如下:
somedir/
configuration/
config.ini
org.eclipse.osgi_3.2.0.jar
B1.jar
B2.jar
上面的 config.ini 是一个Java属性文件,包含下面的行。注意osgi.bundles属性功能非常强大。具体参考文档。
osgi.bundles=B1.jar@start, B2.jar@start
eclipse.ignoreApp=true
当Equinox使用上面的命令行启动时,B1和B2将被安装和启动。如果你想指定另一个configuration,仅需要增加 -configuration <location> 到命令行。主要,由于这里你只是运行你自己的bundles,我们增加一行内容来告诉Equinox,让它跳过试图启动一个Eclipse应用这一步。这个设置不是必须的,没有的话,你的log里面会有一些无关的信息。关于命令行参数和系统属性的设置,请参考:
http://help.eclipse.org/help32/topic/org.eclipse.platform.doc.isv/reference/misc/index.html
http://help.eclipse.org/help32/topic/org.eclipse.platform.doc.isv/reference/misc/runtime-options.html
现在,要想把事情变的更容易,你可以增加一些 Eclipse bundles(例如, org.eclipse.equinox.common 和 org.eclipse.update.configurator)。这能提供自动发现/安装bundle的能力。设置如下:
somedir/
configuration/
config.ini
org.eclipse.osgi_3.3.0.jar
org.eclipse.equinox.common_3.3.0.jar
org.eclipse.update.configurator_3.2.100.jar
plugins/
B1.jar
B2.jar
在你的config.ini文件中增加这些 bundles:
osgi.bundles=org.eclipse.equinox.comment@2:start, org.eclipse.update.configurator@3:start
当 Update configurator bundle启动,它自动发现和安装 plugin 目录中处理 Equinox JAR外 所有的bundles。注意,configurator不会自动启动这些bundles。
最后,如果你使用3.3版,你可以增加 equinox launcher 到 configuration中。equinox launcher 又3块组成:本地executable(eclipse.exe),一个共享库(eclipse_1017.dll)和一个launcher jar (org.eclipse.equinox.launcher_1.0.0.jar)。executable 在 eclipse install 的根目录。共享库是特定的平台碎片(例如,org.eclipse.equinox.launcher.win32.win32.x86)。共享库和 launcher jar 位于 plugins 目录中。配置详情如下:
somedir/
configuration/
config.ini
eclipse.exe
plugins/
org.eclipse.equinox.common_3.3.0.jar
org.eclipse.equinox.launcher.win32.win32.x86_1.0.0/
eclipse_1017a.dll
[other launcher fragment content]
org.eclipse.equinox.launcher_1.0.0.jar
org.eclipse.osgi_3.3.0.jar
org.eclipse.update.configurator_3.2.100.jar
B1.jar
B2.jar
当 equinox launcher 使用时,所有的 bundles (包括框架 org.eclipse.osgi )都要放在 plugins目录下。equinox launcher 的缺省配置是用来启动 eclipse 应用的。如果eclipse应用没有被找到,那么OSGi框架将关闭然后equinox退出。为了防止这种情况,config.ini 里面必须配置另一个属性(osgi.noShutdown=truen)。那么最终的config.ini如下所示:
osgi.bundles=org.eclipse.equinox.common@2:start, org.eclipse.update.configurator@3:start
eclipse.ignoreApp=true
osgi.noShutdown=true
一旦设置完毕,你可以使用下面的命令通过控制台启动equinox:
eclipse -console
Eclipse和Equinox提供一组中药的扩展和配置选项(例如,extension registry, application model, shared installs,…),这超过了作为一个Getting Started文档的范围。要使用eclipse的全部能力,看Eclipse IDE和RCP应用是如何架构和check out帮助系统的链接:
http://help.eclipse.org/help32/topic/org.eclipse.platform.doc.isv/reference/misc/multi_user_installs.html
那些对OSGi的Eclipse扩展比较感兴趣的,请看:
http://help.eclipse.org/help32/topic/org.eclipse.platform.doc.isv/reference/misc/bundle_manifest.html
大多数工具是实现性质的。很普遍的概念已经被提交在OSGi R4.1 或者 R5 规范,其他的到Eclipse规范。所有的东西都到位,来解决实质问题,我们(或者我们的顾客)都有。你可能也有一些相关的问题。
Posted in OSGi | Leave a comment