Maven+Hubson持续集成建置总结
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Maven+Hubson持续集成建置总结
制作人:刘松
最后修改日期:2010/7/17
版本:v0.1
一.Q&A
1.如果需要引用的jar包在repository中找不到怎么办?
答:比如ms sql的jdbc,在官方的repository中是找不到的。
这时可以在将这些jar下载下来,加入内网用来做mirror的nexus的第三方组件库中(third party)。
在nexus页面中repository->third part->upload artifact中。
上传到第三方组件库时注意Classifier的填写,这个是将加在你上传的Jar包的名字当中,作为和其他同名组件的一个区分,以便于maven能找到在哪里下载它。
比如ojdbc14,在官方repository中只提供了一个pom而没有jar,这时可以将ojdbc14上传到第三方组件库中,指定classifier为local,这样在dependcy中,加上<classifier>local</classifier>,这样maven就能在内网的nexus中找到它。
2.如果Eclipse的Libraries中出现如下图所示错误怎么办?
答:这是因为工程用到的dependcy中有struts2-core,它依赖于tools.jar,于是在libraries中自动添加了tools.jar的依赖。
如果添加struts-core时,缺乏一些环境配置,eclipse就会自动到eclipse工作的jre中找tools.jar,出现tools.jar找不到的错误(提示Missing artifact com.sun:tools:jar:1.5.0:system的错误,同时libraries中显示tools.jar missing)。
要解决这个问题,
(1).首先要注释掉对于struts2-core的引用,
(2)一种方法是,在eclipse.ini中增加-vm "<jdk home>\bin"的启动参数
(3)或者另一种方法,在path中增加<jdk home>\bin到path最前面
(4)启动eclipse
(5)取消struts2-core引用的注释,保存
即可消除错误。
之所以要先注释掉struts2-core的引用,是因为tools.jar是在加入struts2-core 的引用时,ec lipse根据当时环境变量的设置产生寻找tools.jar的目录的。
只有再次加入struts2-core,eclipse才会根据当前的环境再次寻找tools.jar的目录,消除问题。
3.使用maven编译时出现错误提示–source 1.3不支持annotation或是泛型
等,至少需要-source1.5(错误提示内容是中文意译,原文为英文),怎么办?
答:在pom.xml中加入<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.0.2</version>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
注意红色标识的地方,如果不加入此段定义,maven将会根据maven基类的POM生产此段定义,可在eclipse中的Effictive Pom中,看到maven根据基类的POM生产的实际运行时的POM,关于此段的定义是
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.0.2</version>
</plugin>
而默认的source是1.3,不能识别annotation和泛型等。
要想改变,就要在项目的POM中定义maven-compiler-plugin,来复写基类中的POM里的定义。
4.出现错误提示Missing artifact com.sun:tools:jar:1.
5.0:system怎么办?答:同问题2.
5.项目Cl asspath环境中多出意想不到的jar包怎么办?
答:因为你Dependency的某些artifact会引用某些包,将会自动将它引用的jar包加入你的classpath,有时候这回引起你的程序的冲突,比如说它引用的jar包你的工程也需要,但版本更高,这时它加入的jar包将会引起你程序的BUG。
这时需要在pom里定义dependency 的时候用<execlute>的标签将不希望它自动引入的jar包给排除掉。
6.Hudson的简单安装配置指南
答:参考/blog/572153
7.如何设置hudson工作目录?
答:在hudson的web工程中,web.xml中的HUDSON_HOME中定义本地的工作路径,然后重新启动tomcat,工作路径就被更改了。
8.为什么hudson的插件上传后没有任何显示?
答:需要重新启动tomcat,插件才会生效。
另外,插件必须要是.hpi后缀,有时下载下来会是.zip后缀,需要手工改为.hpi
9.hudson自动部署如何配置?
答:hudson的自动部署需要增加插件,可以从以下url下载自动部署的插件https:///files/documents/2402/106347/deploy.hpi另外,自动部署的配置需要注意war/ear file的路径配置中,可以选择相对路径,相对路径是从{hudson home}/jobs/{task name}/workspace开始的。
此外,必须要提供tomcat的管理密码。
10.为什么自动部署第一次能成功,但下次再部署时,tomcat的webapps的工
程就只剩一个空壳,无法再用url访问部署的工程?
答:这是因为再次部署前,undepoy工程时,因为jar包被locking,未能将工程卸载干净,遗留了工程的空壳和部分jar包,再次部署时,实际上未能部署成功。
要解决此问题,关键在于要解除jar包的锁定,让工程能卸载干净。
可参考文章/tomcat/FAQ/Windows#Q5。
对于tomcat5.5,可以在conf下的context.xml 加入<context antiJARLocking=”true” antiResourceLocking=”true”>来解决此问题。
对于tocmat6.x,解决方式有所不同,可参考上面的链接。
需要注意的是,因为加上antiResourceLocking=”true”,Tomcat在重新部署工程时,
因为第三方的jar包很多,会出现Tomcat当机的状况,查看日志,出现permgen space ng.OutOfMemery,这种错误常见在web服务器对JSP进行pre compile的时候。
如果你的WEB APP下都用了大量的第三方jar, 其大小超过了jvm默认的大小(4M)那么就会产生此错误信息了。
参考/fenglibing/archive/2007/11/21/1896008.aspx /course/3_program/java/javajs/20100719/454803.html
解决方法可在启动参数中设置-Xms256m -Xmx512m -XX:MaxNewSize=256m -XX:MaxPermSize=256m 。
如使用服务方式,在Configure Tomcat-》JAVA-》JAVA OPTIONS中的参数设置是:
-Xms500m
-Xmx1024m
-XX:PermSize=64M
-XX:MaxPermSize=256m
-XX:ReservedCodeCacheSize=48m
-Duser.timezone=GMT+08
11.如何让单元测试的事务能回滚
答:在你的单元测试继承了org.springframework.test.AbstractTransactionalDataSourceSpringContextTests 类后,在上下文中申明<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManag er">
<!-- DataSourceTransactionManager需要注入一个DataSource的引用-->
<property name="dataSource"ref="dataSource"/>
</bean>即可自动在测试方法前开始事务,在方法后回滚事务。
12.如何让Maven支持字符集为UTF-8的源码编译
答:要在Compiler插件中申明encoding为utf-8, <plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.0.2</version>
<configuration>
<source>1.5</source>
<target>1.5</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
,同时,在Properties中也要申明sourceEncoding为utf-8,<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>。