我想学习JSP / servlets,所以我开始创建我的第一个tomcat应用程序。
我已经阅读了apache教程here,并逐步尝试在tomcat中安装我的应用程序(具有适当dir结构的简单测试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 :(得分:1)
如果您正在使用示例build.xml,请更改
localWar="file://${build.home}"
到
war="${dist.home}/${app.name}-${app.version}.war"
如果你在ANT_HOME / lib中有catalina-ant.jar。尝试从此位置删除它。
重启tomcat。
这对我有用。
答案 1 :(得分:1)
简答:
CATALINA_HOME/lib
复制到ANT_HOME/lib
或 -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 install 命令执行 deploy 任务,这不是Ant中的标准任务,而是Tomcat提供的自定义任务。部署任务由DeployTask
类(类的全名为org.apache.catalina.ant.DeployTask
)实现,该类位于CATALINA_HOME/lib/catalina-ant.jar
。自定义任务(如DeployTask
)通常依赖于外部库,因此您需要将这些库添加到Ant的类路径中。有关详细信息,请参阅Optional Tasks in Ant。
答案 2 :(得分:0)
您已点击https://issues.apache.org/bugzilla/show_bug.cgi?id=52148
升级到最新的Tomcat 7版本,问题就会消失。
答案 3 :(得分: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
)