一.Q&A
答:比如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中找到它。
<!--[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>\bin到path最前面
(4)启动eclipse
(5)取消struts2-core引用的注释,保存
即可消除错误。之所以要先注释掉struts2-core的引用,是因为tools.jar是在加入struts2-core的引用时,eclipse根据当时环境变量的设置产生寻找tools.jar的目录的。只有再次加入struts2-core,eclipse才会根据当前的环境再次寻找tools.jar的目录,消除问题。
答:在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里的定义。
答:同问题2.
答:因为你Dependency的某些artifact会引用某些包,将会自动将它引用的jar包加入你的classpath,有时候这回引起你的程序的冲突,比如说它引用的jar包你的工程也需要,但版本更高,这时它加入的jar包将会引起你程序的BUG。这时需要在pom里定义dependency的时候用<execlute>的标签将不希望它自动引入的jar包给排除掉。
答:参考http://sinye.iteye.com/blog/572153
答:在hudson的web工程中,web.xml中的HUDSON_HOME中定义本地的工作路径,然后重新启动tomcat,工作路径就被更改了。
答:需要 重新启动tomcat,插件才会生效。另外,插件必须要是.hpi后缀,有时下载下来会是.zip后缀,需要手工改为.hpi
答:hudson的自动部署需要增加插件,可以从以下url下载自动部署的插件https://hudson.dev.java.net/files/documents/2402/106347/deploy.hpi 另外,自动部署的配置需要注意war/ear file的路径配置中,可以选择相对路径,相对路径是从{hudson home}/jobs/{task name}/workspace开始的。此外,必须要提供tomcat的管理密码。
答:这是因为再次部署前,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
答:在你的单元测试继承了org.springframework.test.AbstractTransactionalDataSourceSpringContextTests类后,在上下文中申明<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!-- DataSourceTransactionManager需要注入一个DataSource的引用-->
<property name="dataSource" ref="dataSource"/>
</bean> 即可自动在测试方法前开始事务,在方法后回滚事务。
答:要在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>
答:1.安装Visual SourceSafe Plug-in插件
2.配置中Visual Source Safe
Server Path输入:\\serverpath\srcsafe.ini,即访问srcsafe.ini的网络路径,注意要带上srcsafe.ini
3.user name和 password为vss控制的用户名和密码
4.vss folder path是vss控制器中你需要checkout你的代码的路径,表示例如$/SpeedSupervise.root/SpeedSupervise
5.勾选keep the file as writeable和Fetch 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服务即可。