调用 ant 目标时出现 java.util.zip.ZipException 错误

标签 java ant

调用 ANT 目标时,出现以下错误。我尽力以我的水平最好地解决问题,但没有。

Unable to obtain resource from C:\uiunit\log4j.properties: java.util.zip.ZipException: error in opening zip file
[junit] Unable to obtain resource from C:\uiunit\log4j.properties:
[junit] java.util.zip.ZipException: error in opening zip file
[junit]     at java.util.zip.ZipFile.open(Native Method)
[junit]     at java.util.zip.ZipFile.<init>(ZipFile.java:214)
[junit]     at java.util.zip.ZipFile.<init>(ZipFile.java:144)
[junit]     at java.util.jar.JarFile.<init>(JarFile.java:152)
[junit]     at java.util.jar.JarFile.<init>(JarFile.java:116)
[junit]     at org.apache.tools.ant.AntClassLoader.getResourceURL(AntClassLoader.java:1006)
[junit]     at org.apache.tools.ant.AntClassLoader$ResourceEnumeration.findNextResource(AntClassLoader.java:149)
[junit]     at org.apache.tools.ant.AntClassLoader$ResourceEnumeration.<init>(AntClassLoader.java:110)
[junit]     at org.apache.tools.ant.AntClassLoader.findResources(AntClassLoader.java:953)
[junit]     at org.apache.tools.ant.AntClassLoader.getNamedResources(AntClassLoader.java:922)
[junit]     at org.apache.tools.ant.loader.AntClassLoader5.getResources(AntClassLoader5.java:58)
[junit]     at org.apache.tools.ant.taskdefs.optional.junit.JUnitTask.checkForkedPath(JUnitTask.java:1181)
[junit]     at org.apache.tools.ant.taskdefs.optional.junit.JUnitTask.executeAsForked(JUnitTask.java:1061)
[junit]     at org.apache.tools.ant.taskdefs.optional.junit.JUnitTask.execute(JUnitTask.java:855)
[junit]     at org.apache.tools.ant.taskdefs.optional.junit.JUnitTask.executeOrQueue(JUnitTask.java:1903)
[junit]     at org.apache.tools.ant.taskdefs.optional.junit.JUnitTask.execute(JUnitTask.java:804)
[junit]     at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292)
[junit]     at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
[junit]     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[junit]     at java.lang.reflect.Method.invoke(Method.java:601)
[junit]     at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
[junit]     at org.apache.tools.ant.Task.perform(Task.java:348)
[junit]     at org.apache.tools.ant.Target.execute(Target.java:435)
[junit]     at org.apache.tools.ant.Target.performTasks(Target.java:456)
[junit]     at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1393)
[junit]     at org.apache.tools.ant.Project.executeTarget(Project.java:1364)
[junit]     at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
[junit]     at org.apache.tools.ant.Project.executeTargets(Project.java:1248)
[junit]     at org.apache.tools.ant.Main.runBuild(Main.java:851)
[junit]     at org.apache.tools.ant.Main.startAnt(Main.java:235)
[junit]     at org.apache.tools.ant.launch.Launcher.run(Launcher.java:280)
[junit]     at org.apache.tools.ant.launch.Launcher.main(Launcher.java:109)
[junit] DEBUG com.cordys.cm.uiunit.config.IConfiguration - Using config file: "/C:/uiunit/UIUnit.properties" (-2009166949)
[junit] null
[junit] Running test.CapsInstallerTest
[junit] Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.184 sec
[junit] Test test.CordysCapsInstallerTest FAILED

[junitreport] 处理 D:\checkouts\GUIInstaller\TESTS-CapsInstallerTest-Suites.xml 到 D:\checkouts\GUIInstaller\guiunit.build.junit.report\junit-nof [junitreport] 加载样式表 jar:file:/D:/checkouts/ant/lib/ant-junit.jar!/org/apache/tools/ant/taskdefs/optional/junit/xsl/junit-noframes.xsl [junitreport] 转换时间:499ms

观察:- 如果我通过 eclipse 执行编译操作,则 ANT 目标调用工作正常。 Bu 如果我通过 ANT 执行编译操作,则 ANT 目标调用失败并出现上述错误。

Buil.xml 文件内容

<project name="GUITest" basedir="." default="installBOP">
<property environment="env" />
<property file="installer.properties"/>
<property file="uninstaller.properties"/>
<property file="c:/uiunit/uiunit.properties" />
<property name="src" location="src" />
<property name="src.test" location="src/test" />
<property name="fit" location="fit" />
<property name="bin" location="bin" />
<property name="lib" location="lib" />
<property name="guiunit.build.junit.report" location="guiunit.build.junit.report" />
<property name="report" location="report" />
<property name="report.run" location="report/run" />
<property name="REPORTNAME" location="CordysCapsInstallerTest" />

<path id="lib.classpath">
<fileset dir="${lib}">
    <include name="**/*.jar" />
</fileset>
</path>

    <path id="test.classpath">
    <path refid="lib.classpath" />
    <pathelement location="${bin}" />
    <pathelement location="C:/uiunit" />
    </path>

<condition property="OsName" value="Windows">
    <os family="windows"/>
</condition>
<condition property="OsName" value="Linux">
    <os name="Linux"/>
</condition>
<condition property="OsName" value="aix">
    <os name="AIX"/>
</condition>
<condition property="OsName" value="SunOS">
    <os name="SunOS"/>
</condition>
<condition property="isUnix">
    <os family="unix"/>
</condition>
<condition property="onOracle">
    <equals arg1="${env.DB_VENDOR_NAME}" arg2="Oracle 9i / 10g / 11g"/>
</condition>
<condition property="onWindows">
    <os family="Windows"/>
</condition>
<condition property="onLinux">
    <os name="Linux"/>
</condition>
<condition property="onAix">
    <os name="AIX"/>
</condition>

<condition property="is64bit" value="-64bit" else="">
    <and>
        <os arch="amd64"/>
        <not>
            <equals arg1="${branch.name}" arg2="BOP4-CU"/>
        </not>
        <not>
            <equals arg1="${branch.name}" arg2="BOP4-CU-Release"/>
        </not>
    </and>
</condition>

<target name="help">
    <echo>ant upgrade: Upgrade the cordys</echo>
    <echo>ant install: Install the cordys</echo>
    <echo>ant uninstall: Uninstall the cordys</echo>
</target>

<target name="clean">
    <delete dir="${bin}" />
    <delete dir="${report}" />
</target>

<target name="compile" depends="clean">
    <mkdir dir="${bin}" />
    <!--<javac includeantruntime="false" srcdir="${src}" destdir="${bin}">
        <classpath refid="test.classpath" />            
    </javac>-->
    <javac destdir="${bin}" debug="${debug}" nowarn="${debug}" deprecation="${deprecation}" optimize="${optimize}">
        <classpath refid="test.classpath" />
        <src path="${src}" />
    </javac>
</target>

<target name="copy-installer" unless="dont.download">
    <echo message="Fetching build number...." />
    <taskdef resource="net/sf/antcontrib/antcontrib.properties" classpath="${lib}/commons-net-2.2.jar" />
    <ftp
        action="get"
        server="${ftp.server.name}"
        userid="${ftp.user.name}"
        remotedir="${ftp.remote.dir}/${branch.name}"
        password="${ftp.user.password}"
        passive="true">
        <fileset  dir="${basedir}">
            <include name="build.number" />
            <include name="build.properties"/>
        </fileset>
    </ftp>
    <move file="build.number" tofile="buildnumber.properties"/>
    <property file="${basedir}/build.properties"/>
    <property file="${basedir}/buildnumber.properties"/>
    <delete dir="${basedir}/installers" failonerror="false"/>
    <condition property="buildfolder" value="" else="/build.${build.number}">
        <or>
            <equals arg1="${branch.name}" arg2="BOP4-CU"/>
            <equals arg1="${branch.name}" arg2="BOP4-CU-Release"/>
        </or>
    </condition>
    <echo message="Fetching installer.... from ${ftp.remote.dir}/${branch.name}${buildfolder}/external/${OsName}${is64bit}" />
    <ftp
        action="get"
        server="${ftp.server.name}"
        userid="${ftp.user.name}"
        remotedir="${ftp.remote.dir}/${branch.name}${buildfolder}/external/${OsName}${is64bit}"
        password="${ftp.user.password}" 
        passive="true">
        <fileset  dir="${basedir}/installers">
            <include name="${name.dist.zip.file}"/>
        </fileset>
     </ftp>
    <unzip src="${basedir}/installers/${name.dist.zip.file}" dest="${basedir}/installers"/>
    <chmod dir="${basedir}/installers" perm="ugo+rx" includes="*.bin" osfamily="unix"/>
    <delete file="${basedir}/installers/${name.dist.zip.file}"/>
</target>

 <target name="installTilBaseline" depends="compile,copy-installer">
    <echo message="${log4j.rootCategory}"/>
    <mkdir dir="${report.run}" />        
    <java fork="true" classname="test.GUITest" failonerror="true">
        <arg line="install"/>
        <!--jvmarg line="-Dlog4j.configuration=${basedir}/lib/log4j.properties"/-->
        <classpath>
            <path refid="test.classpath"/>
            <path location = "$(bin)" />
            <pathelement location="${env.JAVA_HOME}/lib/tools.jar"/>
            <pathelement location="${env.Path}"/>
        </classpath>            
    </java>
    <echo message="${env.classpath}"/>      
</target>

<target name="uninstallBOP" depends="compile">
    <mkdir dir="${report.run}" />        
        <java fork="true" classname="test.GUITest" failonerror="true">
            <arg line="uninstall"/>
            <classpath>
                <path refid="test.classpath"/>
                <path location = "$(bin)" />
                <pathelement location="${env.JAVA_HOME}/lib/tools.jar"/>
                <pathelement location="${env.Path}"/>
            </classpath>
        </java>
    <echo>Please see the run report page for more details</echo>        
</target>

<target name="upgradeTilBaseline" depends="compile,copy-installer">
    <mkdir dir="${report.run}" />        
        <java fork="true" classname="test.GUITest" failonerror="true">
            <arg line="upgrade"/>
            <classpath>
                <path refid="test.classpath"/>
                <path location = "$(bin)" />
                <pathelement location="${env.JAVA_HOME}/lib/tools.jar"/>
                <pathelement location="${env.Path}"/>
            </classpath>
        </java>
    <echo>Please see the run report page for more details</echo>
</target>

<target name="launch-rc-server" if="${selenium.server.ant}" >
    <mkdir dir="${report.run}"/>
    <taskdef resource="net/sf/antcontrib/antcontrib.properties" classpath="${lib}/ant-contrib-1.0b1.jar" />
    <taskdef name="stringutil" classname="ise.antelope.tasks.StringUtilTask" classpath="${lib}/antelopetasks-3.2.10.jar" />
    <stringutil string="${seleniumserver}" property="indexofcom">
        <indexof string=":" />
    </stringutil>
    <stringutil string="${seleniumserver}" property="temp">
        <substring beginindex="${indexofcom}" />
    </stringutil>
    <stringutil string="${temp}" property="hub.port">
        <replace regex=":" replacement="" />
    </stringutil>
    <if>
    <equals arg1="${browsertype}" arg2="safariproxy" />
    <then>
        <property name="selenium.server" value="selenium-server-standalone-2.0b3.jar"/>
    </then>
    <else>
        <property name="selenium.server" value="selenium-server-standalone-2.32.0.jar"/>
    </else>
    </if>
    <if>
        <istrue value="${browser.session.reuse}"/>
        <then>
            <property name="temp.selenium.args" value="-port ${hub.port} -browserSessionReuse" />
        </then>
        <else>
            <property name="temp.selenium.args" value="-port ${hub.port}" />
        </else>
    </if>
    <if>
        <isset  property="selenium.args.custom"/>
        <then>
            <property name="selenium.args" value="${temp.selenium.args} ${selenium.args.custom}" />
        </then>
        <else>
            <property name="selenium.args" value="${temp.selenium.args}" />
        </else>
    </if>
    <echo>/K start java -jar lib/${selenium.server} ${selenium.args}</echo>
    <exec dir="." executable="cmd" spawn="false" output="${report.run}/startsel-output.txt" logerror="true">
        <arg line="/K start java -jar lib/${selenium.server} ${selenium.args}"/>
    </exec>
    <sleep seconds="10"/>
    <antcall target="waitForSeleniumServer" />
</target>

<target name="waitForSeleniumServer" description="wait till selenium server starts"  if="${selenium.server.ant}">
    <echo taskname="waitfor" message="Wait for proxy server launch" />
    <waitfor maxwait="2" maxwaitunit="minute" checkevery="100">
        <http url="http://${seleniumserver}/selenium-server/driver/?cmd=testComplete"/>
    </waitfor>
</target>

<target name="shutdown-rc-server" description="this will shutdown RC" if="${selenium.server.ant}">
    <echo>seleniumserver is ${seleniumserver}</echo>
    <java classname="com.selenium.remotecontrol.ShutDownRC" fork="true" failonerror="true">
        <jvmarg value="-Durl=http://${seleniumserver}" />
        <classpath>
            <fileset dir="${basedir}/lib">
                <include name="commons-httpclient-3.0.1.jar" />
                <include name="commons-logging-*.jar" />
                <include name="commons-codec-1.5.jar" />
                <include name="shutdownrc.jar" />
            </fileset>
        </classpath>
    </java>
    <sleep seconds="3"/>
</target>

<target name="installcaps" depends="launch-rc-server">
<echo>${test.classpath}</echo>
<mkdir dir="${guiunit.build.junit.report}" />
<!-- do necessary setup-->
<junit fork="yes" failureproperty="junit.failed" dir="${basedir}"
    filtertrace="on" 
    haltonfailure="no" printsummary="on"
    showoutput="yes">
    <classpath>
        <path refid="test.classpath"/>
        <pathelement location="${env.JAVA_HOME}/lib/tools.jar"/>
        <pathelement location="${env.Path}"/>
        <pathelement location="${bin}"/>
    </classpath>        
    <formatter type="xml"/>
    <test name="test.CordysCapsInstallerTest" todir="${guiunit.build.junit.report}"/>
</junit>
<junitreport tofile="TESTS-CordysCapsInstallerTest-Suites.xml">
    <fileset dir="${guiunit.build.junit.report}">
        <include name="**/TEST-*.xml"/>
    </fileset>
    <report format="noframes" todir="${guiunit.build.junit.report}"/>
</junitreport>
<antcall target="shutdown-rc-server" />
</target>

<target name="installBOP" depends="installTilBaseline,installcaps">
    <echo>Installation of BOP is completed</echo>
</target>

<target name="upgradeBOP" depends="upgradeTilBaseline,installcaps">
    <echo>Upgrade of BOP is completed</echo>
</target>

<target name="buildjar">

</target>

当我之前调用 $> ant installcaps 目标时,我曾经遇到过上述错误,之后通过遵循 Guillaume Darmont 评论,我删除了 C:\uiunit\log4j.properties 类路径中的值,然后我遇到以下错误

D:\checkouts\GUIInstaller>ant installcaps

构建文件:D:\checkouts\GUIInstaller\build.xml

启动 rc 服务器: [mkdir] 创建目录:D:\checkouts\GUIInstaller\report\run [echo]/K start java -jar lib/selenium-server-standalone-2.32.0.jar -端口 4444

waitForSeleniumServer: [waitfor]等待代理服务器启动

安装上限: [回声] ${test.classpath} [junit] 调试 com.cordys.cm.uiunit.config.IConfiguration - 使用配置文件:“/C:/uiunit/UIUnit.properties” (-2009166949) [junit] 运行 test.CordysCapsInstallerTest [junit] 测试运行:1,失败:0,错误:1,跳过:0,已用时间:0.191 秒 [junit] 测试 test.CordysCapsInstallerTest 失败 [junitreport] 处理 D:\checkouts\GUIInstaller\TESTS-CordysCapsInstallerTest-Suites.xml 到 D:\checkouts\GUIInstaller\guiunit.build.junit.report\junit-noframes.html [junitreport] 加载样式表 jar:file:/D:/checkouts/ant/lib/ant-junit.jar!/org/apache/tools/ant/taskdefs/optional/junit/xsl/junit-noframes.xsl [junitreport] 转换时间:524ms

关闭-rc-服务器: [echo] seleniumserver 是 cin400695:4444 [java] RC 运行于......:4444 已关闭

构建成功 总时间:17秒

在日志文件中我看到以下错误。

testcase classname="test.CordysCapsInstallerTest" name="initializationError0" time="0.007">
      <error type="java.lang.NullPointerException">java.lang.NullPointerException
at java.util.TreeMap.compare(TreeMap.java:1188)
at java.util.TreeMap.put(TreeMap.java:531)
at com.cordys.cm.uiunit.junit4.internal.runners.UIUnitClassMethodsRunner.getTestMethods(UIUnitClassMethodsRunner.java:168)
at com.cordys.cm.uiunit.junit4.internal.runners.UIUnitClassMethodsRunner.&lt;init&gt;(UIUnitClassMethodsRunner.java:45)
at com.cordys.cm.uiunit.junit4.runners.UIUnitRunner.&lt;init&gt;(UIUnitRunner.java:15)
at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
at java.lang.reflect.Constructor.newInstance(Constructor.java:525)

  </testcase>

最佳答案

这种错误通常是由 <junit> 的类路径中的 JAR 以外的文件引起的。 Ant 任务。

Ant 类路径只能包含:

  • JAR 文件
  • ZIP 文件
  • 目录

所以你必须检查你的类路径配置,它似乎包含 C:\uiunit\log4j.properties ,可能代替 C:\uiunit\ .

顺便说一句,您应该发布您的构建文件,错误会更容易跟踪。

关于调用 ant 目标时出现 java.util.zip.ZipException 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17248991/

相关文章:

java - 在 Ant 中,如何导入与声明构建文件相关的属性文件

unit-testing - 是否可以通过电子邮件发送 JUnit 测试报告?

java - 在 Spring 中使用属性来制作对象列表

java - 解析 AsyncTask 时出错

java - Hibernate:如果参与者之一只有最终字符串字段(类似于无状态),则一二一和多二一相等

ant - 输入 sshexec 的密码

java - Gson 无法使用自定义序列化程序进行反序列化

java - 如何将子域定向到正确的 JBoss 应用程序?

java - 为什么 junit 提示缺少 xsl 文件?

ant - 使用 ANT 测试最后一行日志文件