Maven+Hubson持续集成建置总结

.Q&A

1.   如果需要引用的jar包在repository中找不到怎么办?

答:比如ms sqljdbc,在官方的repository中是找不到的。这时可以在将这些jar下载下来,加入内网用来做mirrornexus的第三方组件库中(third party)。在nexus页面中repository->third part->upload artifact中。上传到第三方组件库时注意Classifier的填写,这个是将加在你上传的Jar包的名字当中,作为和其他同名组件的一个区分,以便于maven能找到在哪里下载它。比如ojdbc14,在官方repository中只提供了一个pom而没有jar,这时可以将ojdbc14上传到第三方组件库中,指定classifierlocal,这样在dependcy中,加上<classifier>local</classifier>,这样maven就能在内网的nexus中找到它。

 

2.     如果EclipseLibraries中出现如下图所示错误怎么办?

<!--[if gte vml 1]><v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"> <v:stroke joinstyle="miter" /> <v:formulas> <v:f eqn="if lineDrawn pixelLineWidth 0" /> <v:f eqn="sum @0 1 0" /> <v:f eqn="sum 0 0 @1" /> <v:f eqn="prod @2 1 2" /> <v:f eqn="prod @3 21600 pixelWidth" /> <v:f eqn="prod @3 21600 pixelHeight" /> <v:f eqn="sum @0 0 1" /> <v:f eqn="prod @6 1 2" /> <v:f eqn="prod @7 21600 pixelWidth" /> <v:f eqn="sum @8 21600 0" /> <v:f eqn="prod @7 21600 pixelHeight" /> <v:f eqn="sum @10 21600 0" /> </v:formulas> <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect" /> <o:lock v:ext="edit" aspectratio="t" /> </v:shapetype><v:shape id="_x0000_i1025" type="#_x0000_t75" style='width:414.75pt; height:309pt'> <v:imagedata src="file:///C:\DOCUME~1\zoe\LOCALS~1\Temp\msohtmlclip1\01\clip_image001.png" o:title="" /> </v:shape><![endif]--><!--[if !vml]--><!--[endif]-->

答:这是因为工程用到的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).首先确保lib中使用的的时jdk而不是jre,要注释掉对于struts2-core的引用,

(2)一种方法是,在eclipse.ini中增加-vm "<jdk home>\bin"的启动参数

(3)或者另一种方法,在path中增加<jdk home>\binpath最前面

(4)启动eclipse

(5)取消struts2-core引用的注释,保存

即可消除错误。之所以要先注释掉struts2-core的引用,是因为tools.jar是在加入struts2-core的引用时,eclipse根据当时环境变量的设置产生寻找tools.jar的目录的。只有再次加入struts2-coreeclipse才会根据当前的环境再次寻找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>

而默认的source1.3,不能识别annotation和泛型等。要想改变,就要在项目的POM中定义maven-compiler-plugin,来复写基类中的POM里的定义。

 

4. 出现错误提示Missing artifact com.sun:tools:jar:1.5.0:system怎么办?

答:同问题2.

 

5.  项目Classpath环境中多出意想不到的jar包怎么办?

答:因为你Dependency的某些artifact会引用某些包,将会自动将它引用的jar包加入你的classpath,有时候这回引起你的程序的冲突,比如说它引用的jar包你的工程也需要,但版本更高,这时它加入的jar包将会引起你程序的BUG。这时需要在pom里定义dependency的时候用<execlute>的标签将不希望它自动引入的jar包给排除掉。

 

6. Hudson的简单安装配置指南

答:参考http://sinye.iteye.com/blog/572153

 

7.  如何设置hudson工作目录?

答:在hudsonweb工程中,web.xml中的HUDSON_HOME中定义本地的工作路径,然后重新启动tomcat,工作路径就被更改了。

 

8. 为什么hudson的插件上传后没有任何显示?

答:需要 重新启动tomcat,插件才会生效。另外,插件必须要是.hpi后缀,有时下载下来会是.zip后缀,需要手工改为.hpi

 

9. hudson自动部署如何配置?

答:hudson的自动部署需要增加插件,可以从以下url下载自动部署的插件https://hudson.dev.java.net/files/documents/2402/106347/deploy.hpi  另外,自动部署的配置需要注意war/ear file的路径配置中,可以选择相对路径,相对路径是从{hudson home}/jobs/{task name}/workspace开始的。此外,必须要提供tomcat的管理密码。

 

10. 为什么自动部署第一次能成功,但下次再部署时,tomcatwebapps的工程就只剩一个空壳,无法再用url访问部署的工程?

答:这是因为再次部署前,undepoy工程时,因为jar包被locking,未能将工程卸载干净,遗留了工程的空壳和部分jar包,再次部署时,实际上未能部署成功。要解决此问题,关键在于要解除jar包的锁定,让工程能卸载干净。可参考文章http://wiki.apache.org/tomcat/FAQ/Windows#Q5 。对于tomcat5.5,可以在conf下的context.xml加入<context antiJARLocking=”true” antiResourceLocking=”true”>来解决此问题。对于tocmat6.x,解决方式有所不同,可参考上面的链接。

需要注意的是,因为加上antiResourceLocking=”true”,Tomcat在重新部署工程时,因为第三方的jar包很多,会出现Tomcat当机的状况,查看日志,出现permgen space java.lang.OutOfMemery,这种错误常见在web服务器对JSP进行pre compile的时候。如果你的WEB APP下都用了大量的第三方jar, 其大小超过了jvm默认的大小(4M)那么就会产生此错误信息了。

参考http://blog.csdn.net/fenglibing/archive/2007/11/21/1896008.aspx

http://dev.firnow.com/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.DataSourceTransactionManager"> 

       <!-- DataSourceTransactionManager需要注入一个DataSource的引用--> 

        <property name="dataSource" ref="dataSource"/> 

   </bean>  即可自动在测试方法前开始事务,在方法后回滚事务。

 

12.  如何让Maven支持字符集为UTF-8的源码编译

答:要在Compiler插件中申明encodingutf-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中也要申明sourceEncodingutf-8<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

 

13. 如何使用Hudson Visual SourceSafe Plug-in

答:1.安装Visual SourceSafe Plug-in插件

    2.配置中Visual Source Safe

       Server Path输入:\\serverpath\srcsafe.ini,即访问srcsafe.ini的网络路径,注意要带上srcsafe.ini

    3.user name passwordvss控制的用户名和密码

    4.vss folder pathvss控制器中你需要checkout你的代码的路径,表示例如$/SpeedSupervise.root/SpeedSupervise

    5.勾选keep the file as writeableFetch the files in recursive order

     以上都是在Visual SourceSafe Plug-in的使用说明中可以看到的。

     重点在于如何配置访问srcsafe.ini所在网络路径的用户名和密码?即访问共享目录的用户和密码?

     事实上hudson会以tomcat运行服务时的用户名和密码来访问vss的网络路径。默认tomcat运行服务时是本机用户,这样运行会出现“java.io.IOException: \\10.148.70.215\ebook\SourceCode\ERoadProject\srcsafe.ini doesn't exist. Configuration error?

”的错误。

   解决方法:在本机上配置与访问vss网络路径一样的用户名和密码,并以此用户和密码来启动tomcat服务即可。

猜你喜欢

转载自sailorls.iteye.com/blog/942184
今日推荐