【问题标题】:Tomcat 9 web socket examplesTomcat 9 网络套接字示例
【发布时间】:2018-04-14 23:02:39
【问题描述】:

我正在编译 (javac) Tomcat 示例,特别是 echo endpoint.java examples /WEB-INF/classes 文件夹有一个 echoendpoint.class 文件。我必须假设它是在 tomcat9 的 zip 文件,因为我似乎无法编译它。它不能 找到包裹javax.websocket

error: package javax.websocket does not exist

我可以在 javax websocket 上找到各种 Oracle 文档 包但不知道在哪里下载 jar 文件(我是 使用 jdk 1.8.0_161

我是一个老派程序员,真的不喜欢所有这些工具 试图为我做事(eclipse,maven)。我想知道 到底发生了什么,并在控制之中。所以我什么都做 从命令行并使用 sublime3 编辑我的环境 变量显示:

LLUSERSPROFILE=C:\ProgramData APPDATA=C:\Users\Owner\AppData\Roaming CATALINA_BASE=D:\tomcat9\apache-tomcat-9.0.7
CATALINA_HOME=D:\tomcat9\apache-tomcat-9.0.7
CommonProgramFiles=C:\Program Files\Common Files
CommonProgramFiles(x86)=C:\Program Files (x86)\Common Files
CommonProgramW6432=C:\Program Files\Common Files
COMPUTERNAME=DESKTOP-NMIG0RS ComSpec=C:\WINDOWS\system32\cmd.exe
FPS_BROWSER_APP_PROFILE_STRING=Internet Explorer
FPS_BROWSER_USER_PROFILE_STRING=Default HOMEDRIVE=C:
HOMEPATH=\Users\Owner JAVA_HOME=C:\Program Files\Java\jdk1.8.0_161
LOCALAPPDATA=C:\Users\Owner\AppData\Local
LOGONSERVER=\\DESKTOP-NMIG0RS NUMBER_OF_PROCESSORS=12
OneDrive=C:\Users\Owner\OneDrive OS=Windows_NT
Path=C:\ProgramData\Oracle\Java\javapath;C:\Program Files
(x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS
Client\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\Program
Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program
Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files
(x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program
Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program
Files\PuTTY\;C:\Program Files (x86)\Skype\Phone\;C:\Program
Files\Java\jdk1.8.0_161\bin;C:\Program
Files\nodejs\;C:\Users\Owner\AppData\Local\Microsoft\WindowsApps;C:\Users\Owner\Downloads\java_ee_sdk-7u3-web\glassfish4\bin;C:\Program
Files\Microsoft VS
Code\bin;C:\Users\Owner\AppData\Roaming\npm;C:\Program Files\nodejs;
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC 

我尝试将 D:\tomcat9\apache-tomcat-9.0.7\lib 添加到类路径 javac 命令认为它可能会选择 tomcat-websocket.jar 或 websocket-api.jar 但这也无济于事。所以我有一个多部分 问题:

  1. 在哪里可以获得所需的 Jar 文件?
  2. 为什么 Oracle 不将他们所有的 jar 包都包含在他们的 jdk 下载中?在我看来,它们至少应该包括所有 Javax jar。
  3. 为什么 apache 不包含 .bat 文件来构建所有示例?

【问题讨论】:

标签: java tomcat java-websocket


【解决方案1】:

将目录添加到CLASSPATH 只会添加可能在那里和子目录(具有特定包结构)中找到的.class 文件。如果您想将websocket-api.jar 添加到CLASSPATH,那么您必须这样做:

C:> javac -cp D:\tomcat9\apache-tomcat-9.0.7\lib\websocket.jar myClass.java

Eclipse 和 Maven 之类的工具已经了解这些依赖关系,如果您需要包含项目所依赖的 20、30 或 100 个不同的库,则可以消除您将要进行的所有输入操作。

直接回答您的问题:

  1. 在哪里可以获得所需的 JAR 文件?

在这种特殊情况下,您正在寻找的那个实际上与 Tomcat 捆绑在一起,但您也可以get them from Oracle。问题是 Websocket API 是 Java EE API 的一部分,如果你不知道,你可能不知道你需要下载什么。

  1. 为什么 Oracle 不将他们所有的 jar 包都包含在他们的 JDK 下载中?

因为有 大量 数量的 API,并不是每个人都需要它们。当您安装 Microsoft 的 Visual Studio 时,您是否希望它也安装 Visual COBAL++ 预处理器、Fortran# 编译器和 Microsoft Bob Simulator?应该不会吧。

  1. 为什么 apache 不包含 .bat 文件来构建所有示例?

因为当存在真正有用的构建工具时,它会非常不方便。 Tomcat 项目使用 Apache Ant 构建所有内容,包括 examples Web 应用程序。使用 Ant 比从 .bat 文件构建要好得多。是的,这很复杂。这很复杂,因为构建 Tomcat 很复杂。构建examples web 应用程序的情况不太好,但是能够发出一个<javac> 任务来了解依赖的JAR 文件在哪里,这比每次发生变化时都必须重新滚动整个javac 命令要好得多。

如果你想方便地编译examples web应用程序,你应该下载Apache Ant并运行这个命令:

C:> ant compile-webapp-examples

如果您对 Web 应用程序进行更改,您的更改也会被编译。

值得指出的是,这本质上并不是某些基于 Java 的阴谋迷惑“老派程序员”的一部分。在(几乎完全)使用 Java 工作之前,我在 C 和其他语言方面有很长的历史。单源文件 C 项目之外的任何内容实际上需要makefile,而且我参与的许多项目在从源代码构建活动中也有许多其他步骤。诸如在调用 C 编译器之前运行编译器编译器(lex/yacc 等)等。此外,大多数 C 编译器一次只编译一个文件。因此,如果您有 100 个源文件,那么在一个简单的构建脚本中就需要 100 行。然后,您需要链接步骤,这实际上可能是很多步骤。如果您需要 2、30 或 100 个不同的依赖库,则需要从各自的来源获取它们,然后在链接步骤中全部提及(C 编译器不包括 libssllibwhatever 或,有时甚至是libc)。所以这也不是直截了当的。

【讨论】:

  • 评论大小限制让每个人都免于处理我对“现代”编程工具的肥皂盒咆哮,我想我会在其他地方发布它,并在以后的评论中提供一个链接。
  • @LatitiaLee 通常一个简单的“离开我的草坪”就能说明问题。
猜你喜欢
  • 2013-03-18
  • 1970-01-01
  • 2021-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-04
  • 1970-01-01
相关资源
最近更新 更多