tomcat - 如何从 Ant 脚本编译源代码

标签 tomcat servlets ant catalina

我得到了一个脚本来编译源代码并将它们部署到 Tomcat 网络服务器。

如果我在 Eclipse 中编译源代码,它们编译得很好。

但是使用脚本我得到以下输出:

Buildfile: C:\Dev\workworkspace\myapp\build.xml
     [echo] website root dir is C:/Dev/ServerXamp/tomcat/myapp/myapp line sepa
rator is

clean-build:

compile:
    [mkdir] Created dir: C:\Dev\workworkspace\myapp\build\classes
    [javac] Compiling 86 source files to C:\Dev\workworkspace\myapp\build\c
lasses
    [javac] C:\Dev\workworkspace\myapp\main\src\com\myapp\problempackage\problemclass.java:6: error: package org.apache.catalina.websocket does
 not exist
    [javac] import org.apache.catalina.websocket.*;
    [javac] ^
    [javac] C:\Dev\workworkspace\myapp\main\src\com\myapp\problempackage\problemclass.java.java:7: error: package org.apache.catalina.websocket does
 not exist
    [javac] import org.apache.catalina.websocket.*;
    [javac] ^
    [javac] C:\Dev\workworkspace\myapp\main\src\com\myapp\problempackage\problemclass.java:14: error: cannot find symbol
    [javac] public class problemclass extends MessageInbound
    [javac]                                                   ^
    [javac]   symbol: class MessageInbound
    [javac] C:\Dev\workworkspace\myapp\main\src\com\myapp\problempackage\problemclass.java:25: error: cannot find symbol
    [javac]     private WsOutbound _out;
    [javac]             ^
    [javac]   symbol:   class WsOutbound
    [javac]   location: class problemclass
    [javac] C:\Dev\workworkspace\myapp\main\src\com\myapp\problempackage\problemclass.java:83: error: cannot find symbol
    [javac]     protected  void onOpen(WsOutbound outbound) {
    [javac]                            ^
    [javac]   symbol:   class WsOutbound
    [javac]   location: class problemclass
    [javac] C:\Dev\workworkspace\myapp\main\src\com\myapp\problempackage\problemclass.java:15: error: package org.apache.catalina.websocket does not
 exist
    [javac] import org.apache.catalina.websocket.StreamInbound;
    [javac]                                     ^
    [javac] C:\Dev\workworkspace\myapp\main\src\com\myapp\problempackage\problemclass.java:37: error: cannot find symbol
    [javac]     protected StreamInbound createWebSocketInbound(String subProtoco
l, HttpServletRequest request)
    [javac]               ^
    [javac]   symbol:   class StreamInbound
    [javac]   location: class problemclass
    [javac] C:\Dev\workworkspace\myapp\main\src\com\myapp\problempackage\problemclassServer.java:795: error: bad operand types for binary operator '!='
    [javac]             if (userInfo.websocket != null)
    [javac]                                    ^
    [javac]   first type:  problemclass
    [javac]   second type: <null>
    [javac] C:\Dev\workworkspace\myapp\main\src\com\myapp\problempackage\problemclassServer.java:4593: error: bad operand types for binary operator '!='
    [javac]         if (userInfo.websocket != null)
    [javac]                                ^
    [javac]   first type:  problemclass
    [javac]   second type: <null>
    [javac] C:\Dev\workworkspace\myapp\main\src\com\myapp\problempackage\problemclassServer.java:4907: error: bad operand types for binary operator '!='
    [javac]             if (userInfo.websocket != null)
    [javac]                                    ^
    [javac]   first type:  problemclass
    [javac]   second type: <null>
    [javac] Note: C:\Dev\workworkspace\myapp\main\src\com\myapp\problempackage\problemclassServer.java uses or overrides a deprecated API.
    [javac] Note: Recompile with -Xlint:deprecation for details.
    [javac] 10 errors

BUILD FAILED
C:\Dev\workworkspace\myapp\build.xml:96: Compile failed; see the compiler e
rror output for details.

Total time: 7 seconds

最佳答案

这是因为编译时CLASSPATH 不正确。您可以通过执行以下操作来缓解这种情况:

添加这样的属性

<path id="compile.classpath">
    <fileset dir="WEB-INF/lib">
        <include name="*.jar" />
    </fileset>
</path>

假设编译代码所需的库位于 WEB-INF/lib 下...如果它位于其他地方...输入相对于您的 build.xml 文件的该目录的路径

现在编译时执行以下操作:

<target name="compile" depends="copyfiles">
    <javac destdir="WEB-INF/classes" debug="true" srcdir="WEB-INF/src" includeantruntime="false">
        <classpath refid="compile.classpath" />
    </javac>
</target>

这就是说...在 WEB-INF/src 中编译 java 代码并将类文件放在 WEB-INF/classes 中...并将 WEB-INF/lib(通过 compile.classpath 引用)添加到类路径

可以使用多个标签来指定多个类路径

关于tomcat - 如何从 Ant 脚本编译源代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18580433/

相关文章:

eclipse - 如何更改 tomcat ${appserver.lib} 指向的内容?

java - 如何配置 Tomcat JULI 日志记录来滚动日志文件?

apache - 窗口中的多个tomcat实例

spring - 如何在 Spring AOP 中获取 HttpServletRequest 和 HttpServletResponse 对象

tomcat - 重启tomcat中的特定servlet

java - 无法使用 native bundle exe 启动 JavaFX 应用程序

javascript - 为什么我没有在我的动态 Web 元素中获取 css 和 js 文件我尝试了堆栈溢出中提到的许多方法但它不起作用

tomcat - DIMDIM本地化

java - 将日期从 HTML 表单传递到 servlet 再到 SQL 数据库

java - 陷入使用 github 源代码构建 Sony flashtool 的困境(无法找到 winjre.zip)