运行hudson时,运用cobertura产生coverage reports,每当运行到最后都会报:
FATAL: Java heap space
java.lang.OutOfMemoryError: Java heap space
对在Hudson平台上运行的job下的Java Options对应处加上-Xms128m -Xmx512m条件,问题依然得不到解决。("-Xms128m -Xmx512m"?)
ant script:
<?xml version="1.0"?>
<project name="GEHGUIUT" default="all" basedir=".">
<!-- Dir of the ant properties file -->
<property name="ant.properties.dir" value="."/>
<!-- put in the properties. -->
<property file="${ant.properties.dir}/ant_ut.properties"/>
<property name="testclassname" value="*"/>
<path id="src.classpath">
<pathelement location="${tpcl}/OlderVersions/struts.jar"/>
<pathelement location="${tpcl}/OlderVersions/weblogic.jar"/>
<pathelement location="${tpcl}/icjava621.jar"/>
<pathelement location="${tpcl}/tibrvj.jar"/>
<pathelement location="${tpcl}/tibrjms.jar"/>
<pathelement location="${tpcl}/log4j-1.2.8.jar"/>
<pathelement location="${tpcl}/xml-apis.jar"/>
<pathelement location="${tpcl}/xercesImpl.jar" />
<pathelement location="${tpcl}/castor-0.9.7-xml.jar"/>
<pathelement location="${tpcl}/jgroups-all.jar"/>
<pathelement location="${tpcl}/saaj.jar"/>
<pathelement location="${tpcl}/axis-ant.jar"/>
<pathelement location="${tpcl}/commons-discovery-0.2.jar"/>
<pathelement location="${tpcl}/jaxrpc.jar"/>
<pathelement location="${tpcl}/axis.jar"/>
<pathelement location="${tpcl}/wsdl4j-1.5.1.jar"/>
<pathelement location="${tpcl}/xalan.jar"/>
<pathelement location="${tpcl}/joda-time-1.5.2.jar"/>
</path>
<path id="test.classpath">
<fileset dir="${tpcl}/utest">
<include name="junit-4.6.jar"/>
<include name="mock.jar"/>
<include name="ojdbc14.jar"/>
</fileset>
<fileset dir="${tpcl}">
<include name="commons-collections.jar"/>
<include name="commons-dbcp-1.1.jar"/>
<include name="commons-pool-1.1.jar"/>
<include name="jms.jar"/>
</fileset>
</path>
<path id="cobertura.classpath">
<fileset dir="${tpcl}/utest/cobertura">
<include name="*.jar" />
</fileset>
<path refid="src.classpath"/>
<path refid="test.classpath"/>
</path>
<taskdef classpathref="cobertura.classpath" resource="tasks.properties"/>
<!-- Delete all directories -->
<target name="cleanup">
<tstamp/>
<delete dir="${builddir}"/>
<!--delete dir="${javadoc}"/ -->
</target>
<!-- Create directories -->
<target name="init" depends="cleanup">
<tstamp/>
<mkdir dir="${builddir}"/>
<!--mkdir dir="${javadoc}"/ -->
</target>
<target name="inittest">
<delete dir="${testdir}" />
<mkdir dir="${testdir}" />
<mkdir dir="${testdir}/reports/junitxml" />
<mkdir dir="${testdir}/reports/junithtml" />
<mkdir dir="${testdir}/reports/coveragexml" />
<mkdir dir="${testdir}/reports/coveragehtml" />
</target>
<!-- Generate javadoc -->
<target name="javadoc" depends="init">
<delete dir="${javadoc}"/>
<javadoc packagenames="com.zw.geh.*" author="true" use="true" version="true" sourcepath="${source.web};${source.ejb}" destdir="${javadoc}">
<classpath>
<pathelement location="${tpcl}/struts.jar" />
<pathelement location="${tpcl}/castor-0.9.7-xml.jar" />
<pathelement location="${tpcl}/jms.jar" />
<pathelement location="${tpcl}/xercesImpl.jar" />
<pathelement location="${tpcl}/icjava621.jar"/>
</classpath>
</javadoc>
</target>
<!-- Compile common, EJB and Web module code -->
<target name="compile" depends="init">
<tstamp/>
<javac srcdir="${source.ejb};${source.web};${source.common};${source.workflow};" encoding="ISO-8859-1" destdir="${builddir}" debug="yes">
<classpath refid="src.classpath"/>
</javac>
</target>
<target name="compiletestcode" depends="inittest,compile">
<javac srcdir="${utestdir}/java;" destdir="${testdir}" debug="yes" >
<classpath refid="src.classpath" />
<classpath refid="test.classpath" />
<classpath>
<pathelement location="${builddir}"/>
</classpath>
</javac>
</target>
<target name="copyGlobalLocalResource" depends="compiletestcode">
<copy todir="${builddir}">
<fileset dir="${utestdir}/GlobalEnvironment/China">
<include name="GlobalEnvProperties.properties"/>
</fileset>
</copy>
</target>
<target name="copyGlobalUSResource" depends="compiletestcode">
<copy todir="${builddir}">
<fileset dir="${utestdir}/GlobalEnvironment/US">
<include name="GlobalEnvProperties.properties"/>
</fileset>
</copy>
</target>
<target name="copyResource" depends="compiletestcode">
<copy todir="${builddir}">
<fileset dir="${utestdir}/resources">
<include name="**/*.properties" />
<include name="**/*.sql" />
</fileset>
<fileset dir="${source.web}">
<include name="**/*.properties"/>
<include name="**/*.xslt"/>
</fileset>
<fileset dir="${web.inf.dir}">
<include name="**/server-config.wsdd"/>
</fileset>
<fileset dir="${web.inf.dir}/../">
<include name="**/GEHlog4j.properties"/>
</fileset>
<fileset dir="${config.dir}">
<include name="**/DatabaseType.properties"/>
<include name="**/SQLHelper.properties"/>
</fileset>
<fileset dir="${config.dir}/Oracle">
<include name="**/DatabaseEscapeCharacters.properties"/>
</fileset>
</copy>
<copy file="../ant/gehAppVersion.properties" tofile="${builddir}/com/zw/geh/gehAppVersion.properties"/>
</target>
<!-- this part is for unit test and coverage -->
<target name="instrument">
<cobertura-instrument todir="${instrumenteddir}">
<!--
The following line causes instrument to ignore any
source line containing a reference to log4j, for the
purposes of coverage reporting.
-->
<ignore regex="org.apache.log4j.*" />
<fileset dir="${builddir}">
<exclude name="**/rv/**/*.class"/>
<exclude name="**/*Test.class"/>
</fileset>
</cobertura-instrument>
</target>
<target name="test">
<junit dir="./" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" showoutput="true">
<!--
Note the classpath order: instrumented classes are before the
original (uninstrumented) classes. This is important.
-->
<classpath location="${instrumenteddir}" />
<syspropertyset>
<propertyref prefix="test-sys-prop."/>
<mapper from="test-sys-prop.*" to="*" type="glob"/>
</syspropertyset>
<classpath location="${builddir}" />
<classpath location="${testdir}" />
<!--
The instrumented classes reference classes used by the
Cobertura runtime, so Cobertura and its dependencies
must be on your classpath.
-->
<classpath refid="cobertura.classpath" />
<formatter type="brief" usefile="false"/>
<formatter type="xml" />
<test name="${testcase}" todir="${reportsdir}/junitxml" if="testcase" />
<batchtest todir="${reportsdir}/junitxml" unless="testcase">
<fileset dir="${utestdir}/java">
<include name="**/${testclassname}Test.java" />
<exclude name="**/rv/**/*.java"/>
</fileset>
</batchtest>
</junit>
<junitreport todir="${reportsdir}/junitxml">
<fileset dir="${reportsdir}/junitxml">
<include name="TEST-*.xml" />
</fileset>
<report format="frames" todir="${reportsdir}/junithtml" />
</junitreport>
</target>
<target name="coverage-check">
<cobertura-check branchrate="34" totallinerate="100" />
</target>
<target name="coverage-report">
<!--
Generate an XML file containing the coverage data using
the "srcdir" attribute.
-->
<cobertura-report srcdir="${source.ejb};${source.web};" destdir="${reportsdir}/coveragexml" format="xml" />
</target>
<target name="alternate-coverage-report">
<!--
Generate a series of HTML files containing the coverage
data in a user-readable form using nested source filesets.
-->
<cobertura-report destdir="${reportsdir}/coveragehtml">
<fileset dir="${source.ejb}">
<include name="**/*.java" />
</fileset>
<fileset dir="${source.web}">
<include name="**/*.java" />
</fileset>
<!--
<fileset dir="${source.common}">
<include name="**/*.java" />
</fileset>
<fileset dir="${source.workflow}">
<include name="**/*.java" />
</fileset>
-->
</cobertura-report>
</target>
<target name="cleanupJMSForUSMachine">
<echo message="cleanJMS"/>
<exec executable="/apps/tibco/ems/5.0/bin/cleanupJMSForUTLocal.sh"/>
<echo message="clean up jms successful"/>
</target>
<target name="cleanupJMSForLocalMachine">
<echo message="cleanJMS"/>
<exec executable="cleanupJMSForWindows.bat"/>
<echo message="clean up jms successful"/>
</target>
<target name="cleanGEHDB">
<echo message="cleanGEHDB"/>
<ant antfile="build-cleandatabase.xml" target="cleanupGEH"/>
</target>
<target name="cleanGALDB">
<echo message="cleanGALDB"/>
<ant antfile="build-cleandatabase.xml" target="cleanupGAL"/>
</target>
<target name="cleanGEHDBUS">
<echo message="cleanGEHDB"/>
<ant antfile="build-cleandatabase.xml" target="cleanupGEHUS"/>
</target>
<target name="cleanGALDBUS">
<echo message="cleanGALDB"/>
<ant antfile="build-cleandatabase.xml" target="cleanupGALUS"/>
</target>
<!-- Build script section -->
<target name="all" depends="cleanGEHDB,copyGlobalLocalResource,copyResource,instrument,test,coverage-report,alternate-coverage-report,cleanupJMSForLocalMachine"/>
<target name="US" depends="cleanGEHDBUS,copyGlobalUSResource,copyResource,instrument,test,coverage-report,alternate-coverage-report,cleanupJMSForUSMachine"/>
</project>
<?xml version="1.0"?>
<project default="all" basedir=".">
<!-- Dir of the ant properties file -->
<property name="ant.properties.dir" value="."/>
<!-- put in the properties. -->
<property file="${ant.properties.dir}/ant_ut.properties"/>
<path id="src.classpath">
<fileset dir="${tpcl}/utest">
<include name="ojdbc14.jar" />
</fileset>
</path>
<target name="loadGlobalProperties_China" description="load global properties(China)">
<!-- Pull in China related environmental properties UT may need -->
<property file="${utestdir}/GlobalEnvironment/China/GlobalEnvProperties.properties" />
</target>
<target name="loadGlobalProperties_US" description="load global properties(US)">
<!-- Pull in US related environmental properties UT may need -->
<property file="${utestdir}/GlobalEnvironment/US/GlobalEnvProperties.properties" />
</target>
<target name="cleanupGAL" depends="loadGlobalProperties_China" description="clean db">
<sql driver="${GALGUI.UT.DB.DRIVERNAME}" url="${GALGUI.UT.DB.URL}" password="${GALGUI.UT.DB.PASSWORD}" userid="${GALGUI.UT.DB.USERNAME}" encoding="utf8" print="no">
<transaction src="${clean.GAL.sqlfile.name}"/>
<classpath refid="src.classpath" />
</sql>
</target>
<target name="cleanupGALUS" depends="loadGlobalProperties_US" description="clean db">
<sql driver="${GALGUI.UT.DB.DRIVERNAME}" url="${GALGUI.UT.DB.URL}" password="${GALGUI.UT.DB.PASSWORD}" userid="${GALGUI.UT.DB.USERNAME}" encoding="utf8" print="no">
<transaction src="${clean.GAL.sqlfile.name}"/>
<classpath refid="src.classpath" />
</sql>
</target>
<target name="cleanupGEH" depends="loadGlobalProperties_China" description="clean db">
<sql driver="${GEHGUI.UT.DB.DRIVERNAME}" url="${GEHGUI.UT.DB.URL}" password="${GEHGUI.UT.DB.PASSWORD}" userid="${GEHGUI.UT.DB.USERNAME}" encoding="utf8" print="no">
<transaction src="${clean.GEH.sqlfile.name}"/>
<classpath refid="src.classpath" />
</sql>
</target>
<target name="cleanupGEHUS" depends="loadGlobalProperties_US" description="clean db">
<sql driver="${GEHGUI.UT.DB.DRIVERNAME}" url="${GEHGUI.UT.DB.URL}" password="${GEHGUI.UT.DB.PASSWORD}" userid="${GEHGUI.UT.DB.USERNAME}" encoding="utf8" print="no">
<transaction src="${clean.GEH.sqlfile.name}"/>
<classpath refid="src.classpath" />
</sql>
</target>
</project >
对jsvc自启动的tomcat脚本,增加
CATALINA_OPTS="-Xms128m -Xmx512m",问题得到解决。
#!/bin/sh
#
# Startup Script for Tomcat6
#
# chkconfig: 345 88 18
# description: Tomcat Daemon
# processname: jsvc
# pidfile: /usr/var/run/jsvc.pid
# config:
#
# Source function library.
. /etc/rc.d/init.d/functions
#
prog=tomcat
#
# Adapt the following lines to your configuration
JAVA_HOME=/usr/java/jdk1.5.0_18
CATALINA_HOME=/apps/apache-tomcat-6.0.16
DAEMON_HOME=$CATALINA_HOME/bin/jsvc-src
TOMCAT_USER=your username(Linux下启动tomcat的用户)
HUDSON_HOME=/apps/hudson_gal_geh
# for multi instances adapt those lines.
TMP_DIR=/var/tmp
PID_FILE=/var/run/jsvc.pid
CATALINA_BASE=/apps/apache-tomcat-6.0.16
CATALINA_OPTS="-Xms128m -Xmx512m"
CLASSPATH=\
$JAVA_HOME/lib/tools.jar:\
$CATALINA_HOME/bin/commons-daemon.jar:\
$CATALINA_HOME/bin/bootstrap.jar
case "$1" in
start)
#
# Start Tomcat
#
$DAEMON_HOME/jsvc \
-user $TOMCAT_USER \
-home $JAVA_HOME \
-Dcatalina.home=$CATALINA_HOME \
-Dcatalina.base=$CATALINA_BASE \
-DHUDSON_HOME=$HUDSON_HOME \
-Djava.io.tmpdir=$TMP_DIR \
-wait 10 \
-pidfile $PID_FILE \
-outfile $CATALINA_HOME/logs/catalina.out \
-errfile '&1' \
$CATALINA_OPTS \
-cp $CLASSPATH \
org.apache.catalina.startup.Bootstrap
#
# To get a verbose JVM
#-verbose \
# To get a debug of jsvc.
#-debug \
exit $?
;;
stop)
#
# Stop Tomcat
#
$DAEMON_HOME/jsvc \
-stop \
-pidfile $PID_FILE \
org.apache.catalina.startup.Bootstrap
exit $?
;;
*)
echo "Usage tomcat.sh start/stop"
exit 1;;
esac
<tstamp />
<zipfileset dir="${web}" prefix="WEB-INF">
<include name="**/*.xml"/>
<include name="**/*.java"/>
<exclude name="web.xml"/>
</zipfileset>