使用javac编译时出现问题
当我尝试使用javac任务编译时。控制台里什么也没有。以前,我得到了一些关于我正在编译的东西的信息,例如[javac]“…” 当我清理并重新编译它时,我可以看到输出,但是当我再次编译时,问题就出现了 同样,这个问题以前不存在。这个问题使得tomcat抱怨.war文件,它说“ZipException:oversubscribed literal/length tree” 有谁能指导我解决这个问题吗 编辑:以下是ant脚本的相关部分使用javac编译时出现问题,java,tomcat,ant,zip,javac,Java,Tomcat,Ant,Zip,Javac,当我尝试使用javac任务编译时。控制台里什么也没有。以前,我得到了一些关于我正在编译的东西的信息,例如[javac]“…” 当我清理并重新编译它时,我可以看到输出,但是当我再次编译时,问题就出现了 同样,这个问题以前不存在。这个问题使得tomcat抱怨.war文件,它说“ZipException:oversubscribed literal/length tree” 有谁能指导我解决这个问题吗 编辑:以下是ant脚本的相关部分 <javac destdir="${build.dir}"
<javac destdir="${build.dir}" source="1.6" target="1.6" debug="true" deprecation="false" optimize="false" failonerror="true">
<src path="${src.dir}" />
<classpath refid="master-classpath" />
</javac>
请注意:这在以前的相同文件中工作得非常好。现在,如果不改变项目内部的任何内容,它将不起作用
请注意:我已经完成了正在工作的项目,并已将其存档。它编译得非常完美,我甚至把存档文件交给了一些人,而且它正在与他们一起工作。然后,我做了一些修改,直到我得到ZipException。
在那之后,我保留了修改,并使用了正在工作的旧存档文件,但仍然得到了相同的错误ZipException。因此,问题绝对不是源代码或ant脚本。我相信这在我的环境中是一个问题,但我不知道出了什么问题
build.xml文件如下所示:
<?xml version="1.0"?>
<!DOCTYPE project>
<project name="GameServerPart1" basedir="." default="usage">
<property file="../build.properties" />
<property name="src.dir" value="src/main/java" />
<property name="web.dir" value="war" />
<property name="build.dir" value="${web.dir}/WEB-INF/classes" />
<property name="name" value="GameServerPart1" />
<path id="master-classpath">
<fileset dir="src/main/webapp/WEB-INF/lib">
<include name="*.jar" />
</fileset>
<!-- We need the servlet API classes: -->
<!-- * for Tomcat 5/6 use servlet-api.jar -->
<!-- * for other app servers - check the docs -->
<!--<fileset dir="${appserver.lib}">
<include name="servlet*.jar"/>
</fileset> -->
<pathelement path="${build.dir}" />
</path>
<target name="usage">
<echo message="" />
<echo message="${name} build file" />
<echo message="-----------------------------------" />
<echo message="" />
<echo message="Available targets are:" />
<echo message="" />
<echo message="build --> Build the application" />
<echo message="deploy --> Deploy application as directory" />
<echo message="deploywar --> Deploy application as a WAR file" />
<echo message="cleanr --> clean the build." />
<echo message="" />
</target>
<target name="clean">
<delete dir="${web.dir}" />
</target>
<target name="build" description="Compile main source tree java files">
<mkdir dir="${build.dir}" />
<copy todir="${web.dir}/WEB-INF/">
<fileset dir="src/main/webapp/WEB-INF/">
<include name="**/*.*" />
</fileset>
<filterchain>
<striplinecomments>
<comment value="!" />
</striplinecomments>
<replacetokens>
<token key="hibernate.connection.url" value="${hibernate.connection.url}" />
<token key="hibernate.connection.username" value="${hibernate.connection.username}" />
<token key="hibernate.connection.password" value="${hibernate.connection.password}" />
<token key="fontFamily" value="arial, helvetica, sans-serif" />
</replacetokens>
</filterchain>
</copy>
<copy todir="${build.dir}">
<fileset dir="src/main/resources">
<include name="**/*.*" />
</fileset>
<filterchain>
<striplinecomments>
<comment value="!" />
</striplinecomments>
<replacetokens>
<token key="hibernate.connection.url" value="${hibernate.connection.url}" />
<token key="hibernate.connection.username" value="${hibernate.connection.username}" />
<token key="hibernate.connection.password" value="${hibernate.connection.password}" />
<token key="fontFamily" value="arial, helvetica, sans-serif" />
</replacetokens>
</filterchain>
</copy>
<javac destdir="${build.dir}" source="1.6" target="1.6" debug="true" deprecation="false" optimize="false" failonerror="true">
<src path="${src.dir}" />
<classpath refid="master-classpath" />
</javac>
</target>
<target name="deploywar" depends="build" description="Deploy application as a WAR file">
<war destfile="${name}.war" webxml="${web.dir}/WEB-INF/web.xml">
<fileset dir="${web.dir}">
<include name="**/*.*" />
</fileset>
</war>
<move todir="${deploy.path}" preservelastmodified="true">
<fileset dir=".">
<include name="*.war" />
</fileset>
</move>
</target>
</project>
通过谷歌搜索该异常消息表明,这是由于您(Tomcat)试图读取的ZIP文件损坏所致。为了找出它损坏的原因,我们需要有关如何构建WAR文件的更多信息。我会尝试清除clean删除的各种构建工件集,以查看哪些是导致问题的原因。希望这能提供足够的洞察问题的能力来解决问题。Ant的编译器任务是智能的,从这个意义上说,如果它检测到输出类比源类新,那么编译器会得出结论,该类一定是已经从源代码构建的。在这种情况下,编译器将什么也不做(因为已经检测到工作要完成)
当编译器什么都不做时,就没有输出
在第一次编译之后,打开一个源文件,进行一些简单的更改(例如注释),然后保存该文件。这将使源代码比现有编译类更新。然后,当您调用Ant任务来构建类时,javac任务将检测到源文件比该类更新,并将重新编译源文件以生成新的类文件
既然javac任务将要做一些事情,那么它将有一些事情要报告;因此,您应该看到一些输出(但比必须构建所有内容时要少)。我发现了问题
<copy todir="${web.dir}/WEB-INF/">
<fileset dir="src/main/webapp/WEB-INF/">
<include name="**/*.*" />
</fileset>
<filterchain>
<striplinecomments>
<comment value="!" />
</striplinecomments>
<replacetokens>
<token key="hibernate.connection.url" value="${hibernate.connection.url}" />
<token key="hibernate.connection.username" value="${hibernate.connection.username}" />
<token key="hibernate.connection.password" value="${hibernate.connection.password}" />
<token key="fontFamily" value="arial, helvetica, sans-serif" />
</replacetokens>
</filterchain>
</copy>
应该是
<copy todir="${web.dir}/WEB-INF/">
<fileset dir="src/main/webapp/WEB-INF/">
<include name="**/*.*" />
</fileset>
</copy>
然后一切都好了。你在用ANT吗?你的ANT脚本是什么?细节的数量不够,这与tomcat有什么关系?试试
ant-d
我刚刚添加了我所有的信息。实际上,这是我将应用程序部署到tomcat的目标,也是我调查发生了什么的方式。顺便说一句,d能做什么?我用的是ant。我将添加ant脚本如下:您真的需要从另一端开始工作——“用刀调试,而不是用步枪”。换言之,不要试图猜测什么是错误的,而是找出如何收集更多信息来解决问题。通过实验切断可能的原因空间。比如说,未来可能会有什么问题吗?试着把它拿出来,看看你是否在清洁和不清洁的情况下得到同样的结果。好的战争和坏的战争在规模和其他特征上有什么区别?复制build.dir的内容,在一个好的构建和一个坏的构建之后关闭,并比较它们。有什么不同?我用谷歌搜索了一下,发现了。正如我在最初的帖子中所说的,这个项目的编译问题。以前,我一直在获取“javac”中正在发生的事情的信息,但现在当我重新编译时,我什么都没有得到。PS:我既没有更改build.xml也没有更改源代码文件。如果你想看的话,我已经添加了build.xml。正如我在帖子中所说的。我得到了一些信息,但现在没有,我相信这是ZipException的根本问题。如果您不认为ZipException不是由此引起的,那么您认为问题出在哪里?如果您想查看一下,我已经添加了build.xml。