写在前面:这篇文章大部分是别人写好的,只有后来关于maven的proxy的设置是针对我个人的,因为本人所在公司采用了代理,所以必须设置才行。
WAR安装模式(WinXP,tomcat7.x)
1)首先到archiva主页,在历史版本里下载版最新稳定版的war文件。
2)添加war文件
在tomcat根目录下创建文件夹archiva,把apache-archiva-1.3.6.zip名字改成archiva.war并且拷贝到刚刚创建的% TOMCAT_HOME%/archiva目录下
3)添加tomcat配置文件
创建文件<Tomcat_Home>/conf/Catalina/localhost/archiva.xml,并且写入以下内容
<Context path="/archiva" docBase="${catalina.home}/archiva/archiva.war"> <!--*.war必须和放入的archiva文件夹的war包名字一样-->
<Resource name="jdbc/users" auth="Container" type="javax.sql.DataSource"
username="sa"
password=""
driverClassName="org.apache.derby.jdbc.EmbeddedDriver"
url="jdbc:derby:/path/to/database/users;create=true" />
<Resource name="jdbc/archiva" auth="Container" type="javax.sql.DataSource"
username="sa"
password=""
driverClassName="org.apache.derby.jdbc.EmbeddedDriver"
url="jdbc:derby:/path/to/database/archiva;create=true" />
<Resource name="mail/Session" auth="Container"
type="javax.mail.Session"
mail.smtp.host="localhost"/>
</Context>
注意,由于我使用的是tomcat6.x+版本,需要把xml头 <?xml version="1.0" encoding="UTF-8"?>去掉。
把上边蓝色的部分改成你的本地路径,比如D:\Software\Archiva\database/archiva和D:\Software\Archiva\database/user
Archiva将会自动新建两个目录分别名为archiva和user,并且自动创建DB文件,这点很省心。但是要注意一定要用两个独立的目录,不然文件就乱了。
4)拷贝运行时需要的jar到tomcat的lib目录下
derby-10.1.3.1.jar(或更高版本),activation-1.1.jar和mail-1.4.jar这三个jar
5)更改catalina.bat文件
加入参数
set CATALINA_OPTS=-Dappserver.home=%CATALINA_HOME% -Dappserver.base=%CATALINA_HOME%
注意一定要写在正确的位置。
我为了方便,加在最后了
这是我的文件
:doneSetArgs
set CATALINA_OPTS=-Dappserver.home=%CATALINA_HOME% -Dappserver.base=%CATALINA_HOME%
rem Execute Java with the applicable properties
if not "%JPDA%" == "" goto doJpda
if not "%SECURITY_POLICY_FILE%" == "" goto doSecurity
%_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS% -Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION%
goto end
设置参数CATALINA_OPTS时,等号后边一定不能有双引号。
最近一次复习的时候发现,这些都不管用了,启动tomcat后进入archiva主页,弹出404错误,根据官网 http://archiva.apache.org/docs/2.0.1/adminguide/webapp.html 里面的 Diagnosing Errors提到的路径查看日志,发现下面错误:
严重: Exception sending context destroyed event to listener instance of class org.apache.maven.archiva.web.startup.ArchivaStartup
org.springframework.beans.factory.BeanDefinitionStoreException: Invalid bean definition with name 'registry#commons-configuration' defined in null: Could not resolve placeholder 'appserver.home'
Google搜索了下,有人说将CATALINA_OPTS设置为环境变量,我试了下,果然行。
6) 启动tomcat
地址栏输入http://localhost:8080/archiva
以后的步骤同standalone模式。第一次登录,用户名admin是默认的,需要用户自己设置密码,我的是amdin/admin123
注意,在war模式下,默认的data目录在tomcat根目录下,log文件保存在tomat的log目录下。
可以登陆到管理GUI界面上更改每个repository的data目录。
war模式下,Archiva会在~/m2目录下自动建立一个配置文件archiva.xml
==============配置Maven连接的repository==============
虽然可以直接修改pom.xml文件来更改repository地址,但是可重用性并不好。
建议修改~/.m2目录下的settings.xml文件
只要建立一个镜像就可以了,如下
<mirrors>
<mirror>
<id>archiva</id>
<mirrorOf>*</mirrorOf>
<url>http://localhost:8080/archiva/repository/internal </url>
</mirror>
</mirrors>
由于archiva默认只有central和maven2-repository.dev.java.net
这两个仓库作为下载仓库,一些其他的jar可能不在这两个仓库里(比如
scannotation-1.0.3.jar
),
我们需要自己手工加上。
参考链接:
http://www.mkyong.com/maven/how-to-add-remote-repositories-in-apache-archiva/
http://www.mkyong.com/maven/how-to-add-proxy-connector-in-apache-archiva/
不但需要在Repositories页面点击RemoteRepositories后的 Add来添加我们需要加入的仓库地址,同时还要在Proxy Connectors页面增加相应的 Connector,这样Archiva才能知道它需要代理的仓库。
===============问题作出回应了,怎么还是抛出类似不处理就罢工的信息==================
有时 maven在执行 mvn clean package这样命令老是遇到同一个错误的时候,它会从缓存中看问题是否解决了,如果没有解决,会抛出同样的错误信息,尽管你可能从别的地方解决了。
可以通过 mvn clean package–U让Maven强制执行打包任务。
===============如何设置Proxy,当公司内部有代理==============
请注意,之前我们的设置是将archiva.war作为一个应用放入Tomcat中,这样我们访问archiva通过http://localhost:8080/archiva,而且一切Maven的请求将通过这个网址进行代理。
如果没有采用Nexus或者Archiva做私服,当公司对网络采用代理时,那么~/.m2/settings.xml中关于Proxy的标准设置代码就应该加上并且是:
(Hint:首先确认自己无法直接访问公共的Maven中央仓库,直接运行命令 ping repo1.maven.org可以检查网络。如果真的需要代理,先检查一下代理服务器是否畅通。比如下载有一个IP地址为 3.209.100.82,端口为80的代理服务,我们可以运行telnet 3.209.100.82 80来检测该地址的该端口是否畅通。如果得到错误信息,需要先获取正确的代理服务信息;如果telnet链接正确,则输入ctrl + 】,然后q,回车,退出即可)
<proxy>
<id>igate-proxy</id>
<active>true</active>
<protocol>http</protocol>
<host>3.209.100.82</host>
<port>80</port>
<nonProxyHosts>*.baidu.com|*.google.com </nonProxyHosts>
</proxy>
如果使用了私服(我这里用的是Archiva)并且公司内网使用了代理,那么就要对Archiva做两步处理,让所有的maven请求通过Archiva,而Archiva的所有请求必须通过公司的内网代理,配置如下:
第一步:进入Archiva的管理页面,点击左侧栏的Network Proxies,如下:
点击Add Network Proxy链接,进入编辑页面:
Identifier会在后面用到,这里Hostname是我们公司内部使用的代理IP,端口是80.
点击Save Network Proxy按钮。这里我们就设置好了代理,那么怎么让Archiva的请求知道这个代理并把请求经过这个代理转发呢?
第二步:进入Archiva的管理页面,点击左侧栏的Proxy Connnectors,如下:
点击每一个Proxy Connector右上角的铅笔图标进行编辑,下面选择Central Repository作为例子:
可以发现,我们当初进行Proxy Connector编辑的时候,由于我们还没有设置Network Proxy,所有只有一个(direct connection)这个默认值,现在这个下拉列表中有了我们刚才定义的Network Proxy (igate-proxy), 这里更改igate-proxy作为Central Repository的Network Proxy。至此我们在公司内网使用代理的情况下私服也能正常工作了。