Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用javac编译时出现问题_Java_Tomcat_Ant_Zip_Javac - Fatal编程技术网

使用javac编译时出现问题

使用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任务编译时。控制台里什么也没有。以前,我得到了一些关于我正在编译的东西的信息,例如[javac]“…”

当我清理并重新编译它时,我可以看到输出,但是当我再次编译时,问题就出现了

同样,这个问题以前不存在。这个问题使得tomcat抱怨.war文件,它说“ZipException:oversubscribed literal/length tree”

有谁能指导我解决这个问题吗

编辑:以下是ant脚本的相关部分

<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。