2011-07-09 105 views
0

當我嘗試使用javac任務進行編譯時。我在控制檯中沒有任何東西。以前,我得到了一些關於我在編譯的內容的信息,例如[javac]「....」使用javac編譯時出現問題

當我清理並重新編譯它的工作,我可以看到輸出,但是當我編譯時出現問題再次。

再次,此問題以前不存在。這個問題使得tomcat抱怨.war文件它說「ZipException:超額訂閱文字/長度樹」

任何人都可以指導我解決這個問題嗎?

編輯:這裏是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> 
+0

您使用ANT嗎?你的ANT腳本是什麼?細節數量不夠 –

+0

與tomcat有什麼關係?試試'ant -d' –

+0

我剛剛添加了所有的信息。其實,這是我將應用程序部署到tomcat的目標,以及我如何調查發生的事情。順便說一句,什麼-D會做什麼? – mohamede1945

回答

1

我發現了這個問題。

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

,然後一切正常。

0

谷歌搜索的是異常消息表明,這是由於ZIP文件是腐敗(Tomcat是)試圖讀取。要弄清楚它爲什麼會被損壞,我們需要更多關於如何構建WAR文件的信息。

+0

我做了谷歌它,發現。正如我在原文中所說的編譯項目時所遇到的問題。以前,我正在獲取關於「javac」中發生了什麼的信息,但現在當我重新編譯時,我什麼都沒有得到。 PS:我沒有更改build.xml或源代碼文件。 – mohamede1945

0

我想嘗試擺脫清理刪除的各種構建工件,以查看哪些導致問題。希望這可以讓我們對問題有足夠的瞭解。

+0

如果您想查看,我已經添加了build.xml。 – mohamede1945

0

Ant的編譯器任務是智能的,因爲如果它檢測到輸出類比源類新,那麼編譯器會得出結論,該類必須已經從源代碼構建。在這種情況下,編譯器將不會執行任何操作(因爲工作已經被檢測到)。

當編譯器做了足夠的沒有,然後沒有輸出。

第一次編譯後,打開一個源文件,進行一些簡單的修改(例如註釋),然後保存該文件。這會使源比現有的編譯類更新。然後,當您調用Ant任務來構建類時,javac任務將檢測到該源比該類新,並且它將重新編譯生成新類文件的源文件。

由於javac任務會做些什麼,那麼它將有東西要報告;所以,你應該看到一些輸出(但是如果你不得不建立一切的話)。

+0

如果您想查看,我已經添加了build.xml。 – mohamede1945

+0

正如我在我的帖子中所說。我得到了一些信息,現在它沒有,我相信這是ZipException的根本問題。如果你不認爲ZipException不是由此引起的,那麼你認爲是什麼問題? – mohamede1945