2012-08-04 62 views
1

JSP/servlets是我想學習的東西,所以我着手創建我的第一個tomcat應用程序。第一個tomcat應用程序 - 'ant install'錯誤「NoClassDefFound」

我已經通過Apache教程here,並進展到嘗試安裝我的應用程序在tomcat(簡單的測試html文件與適當的目錄結構)。現在,我意識到希望使用本教程提供的stock build.xml,但我需要從某處開始,我不知道如何自己編寫一個。我查找了一些示例,但它們似乎沒有「安裝」目標,可能它們不是Web應用程序。

我的項目構建,但不通過ant安裝到tomcat上。當我嘗試「螞蟻安裝」我的控制檯輸出...

ant install 
Buildfile: /home/mark/svn/tomcatapp/build.xml 
Trying to override old definition of datatype resources 

prepare: 

compile: 
    [javac] /home/mark/svn/tomcatapp/build.xml:299: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds 

install: 

BUILD FAILED 
/home/mark/svn/tomcatapp/build.xml:375: java.lang.NoClassDefFoundError: org/apache/tomcat/util/buf/B2CConverter 
    at org.apache.catalina.util.Base64.encode(Base64.java:173) 
    at org.apache.catalina.ant.AbstractCatalinaTask.execute(AbstractCatalinaTask.java:204) 
    at org.apache.catalina.ant.DeployTask.execute(DeployTask.java:211) 
    at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291) 
    at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:601) 
    at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106) 
    at org.apache.tools.ant.Task.perform(Task.java:348) 
    at org.apache.tools.ant.Target.execute(Target.java:392) 
    at org.apache.tools.ant.Target.performTasks(Target.java:413) 
    at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1399) 
    at org.apache.tools.ant.Project.executeTarget(Project.java:1368) 
    at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41) 
    at org.apache.tools.ant.Project.executeTargets(Project.java:1251) 
    at org.apache.tools.ant.Main.runBuild(Main.java:811) 
    at org.apache.tools.ant.Main.startAnt(Main.java:217) 
    at org.apache.tools.ant.launch.Launcher.run(Launcher.java:280) 
    at org.apache.tools.ant.launch.Launcher.main(Launcher.java:109) 
Caused by: java.lang.ClassNotFoundException: org.apache.tomcat.util.buf.B2CConverter 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:423) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:356) 
    ... 19 more 

Total time: 0 seconds 

類爲什麼不能被發現,豈不是包含在Tomcat的安裝範圍內?還有一個類似的問題,但我不試圖使用管理器應用程序,我不知道如何編輯類路徑 - 我是否需要編譯一個.java類來爲該項目創建一個類?

我相信一個更簡單的構建文件就足夠了,但我不確定哪些組件是相關的。對於潛在的非常愚蠢的問題抱歉。

這是我的build.xml文件中的安裝目標。

<target name="install" depends="compile" 
    description="Install application to servlet container"> 

    <deploy url="${manager.url}" 
     username="${manager.username}" 
     password="${manager.password}" 
      path="${app.path}" 
     localWar="file://${build.home}"/> 

    </target> 

回答

0

你打https://issues.apache.org/bugzilla/show_bug.cgi?id=52148

升級到最新的Tomcat 7的發佈,問題就會迎刃而解。

+0

我正在運行我認爲的最新版本,前兩天下載了7.0.29。我將如何編輯類路徑以應用該頁面上列出的解決方案。我似乎無法找到catalina-task.xml。謝謝。 – marked 2012-08-05 20:21:11

+1

該文件位於$ CATALINA_HOME/bin – 2012-08-07 20:08:34

+0

謝謝您,發現它並發現修復程序已按照我對最新版本的想象實現。如果我發現問題,我會發布。 – marked 2012-08-19 16:54:06

1

如果您使用的示例build.xml,改變

localWar="file://${build.home}" 

war="${dist.home}/${app.name}-${app.version}.war" 

如果在ANT_HOME/lib目錄卡塔利娜 - ant.jar文件。嘗試從此位置移除它。

重新啓動tomcat。

這一直爲我工作。

0

我也運行Tomcat的新版本(7.0.32),並試圖按照教程遇到了同樣的錯誤。我知道這是不是最好的解決辦法,但也許它會在您的調試幫助:當我使用-lib選項與ant我能夠讓它拉的jar文件與所需的類: ant -lib /usr/local/apache-tomcat-7.0.32/lib/ -lib /usr/local/apache-tomcat-7.0.32/bin/ install(在我的情況/usr/local/apache-tomcat-7.0.32$CATALINA_HOME

1

簡短的回答:

  • 拷貝文件的tomcat-UTIL。罐子從CATALINA_HOME/libANT_HOME/libOR
  • 發出螞蟻命令時,與路徑例如添加-lib選項到該文件,
    ant -lib C:\Tomcat8\lib\tomcat-util.jar install
    (提供CATALINA_HOME指向C:\Tomcat8

說明:

我遇到了與Tomcat 8.0.36類似的問題。根據錯誤消息類org.apache.tomcat.util.codec.binary.Base64未找到。 ant安裝命令從教程執行部署任務,這不是Ant中的標準任務,而是Tomcat提供的自定義任務。部署任務由DeployTask類(該類的全名爲org.apache.catalina.ant.DeployTask)實施,該類放置在CATALINA_HOME/lib/catalina-ant.jar中。自定義任務(如DeployTask)通常依賴於外部庫,因此您需要將這些庫添加到Ant的類路徑中。欲瞭解更多信息,請參閱Optional Tasks in Ant

相關問題