Примеры веб-сокетов Tomcat 9

Я пытаюсь скомпилировать (javac) примеры Tomcat, в частности, в папке echo endpoint.java examples /WEB-INF/classes есть файл echoendpoint.class. Я должен предположить, что он был предварительно скомпилирован в zip-файле для tomcat9, так как я не могу его скомпилировать. Не удается найти пакет javax.websocket.

error: package javax.websocket does not exist

Я могу найти все виды документации Oracle в пакете javax websocket, но не могу понять, где скачать файл jar (s. Я использую 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-файлы.
  3. почему apache не включает .bat файл для сборки всех своих примеров?

person Latitia Lee    schedule 14.04.2018    source источник
comment
1. Пакеты javax входят в состав jre afaik, 2. Идк, решили не делать? 3. Посмотрите на 2. Рассмотрите возможность просмотра stackoverflow.com/help/how-to-ask   -  person David    schedule 15.04.2018


Ответы (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, но вы также можете получить их тоже от Oracle. Проблема в том, что Websocket API является частью API Java EE, и если вы этого не знали, вы могли не знать, что вам нужно скачать.

  1. Почему Oracle не включает ВСЕ свои jar-файлы в загрузку JDK?

Потому что существует огромное количество API, и не всем они нужны всем. При установке Microsoft Visual Studio хотите ли вы, чтобы он также установил препроцессор Visual COBAL ++, компилятор Fortran # и симулятор Microsoft Bob Simulator? Возможно нет.

  1. Почему apache не включает .bat файл для сборки всех своих примеров?

Потому что безумно неудобно, когда существуют настоящие полезные инструменты для сборки. Проект Tomcat использует Apache Ant для создания всего, включая examples веб-приложение. Вам гораздо лучше использовать Ant, чем строить из файла .bat. Да, это сложно. Это сложно, потому что сложно построить Tomcat. Строить examples веб-приложение не так важно, но возможность выполнить <javac> задачу, которая понимает, где находятся зависимые файлы JAR, намного лучше, чем необходимость повторно запускать всю команду javac каждый раз, когда что-то меняется.

Если вы хотите удобно компилировать examples веб-приложение, вам следует загрузить Apache Ant и выполнить эту команду:

C:> ant compile-webapp-examples

Если вы внесете изменения в веб-приложение, ваши изменения тоже будут скомпилированы.

Стоит отметить, что это не что-то, что по своей сути является частью какого-то заговора на основе Java, чтобы запутать «программистов старой школы». Прежде чем работать (почти полностью) на Java, у меня был долгий опыт работы с C и другими языками. Все, что выходит за рамки проекта C с одним исходным файлом, практически требует makefile, и многие проекты, в которых я участвовал, также имели множество других шагов в процессе сборки из исходного кода. Такие вещи, как запуск компилятора-компилятора (lex / yacc и т. Д.) Перед вызовом компилятора C и т. Д. Кроме того, большинство компиляторов C компилируют только один файл за раз. Итак, если у вас есть 100 исходных файлов, вам понадобится 100 строк в простом сценарии сборки. Затем вам понадобится этап связывания, который на самом деле может состоять из множества этапов. Если вам нужно 2, 30 или 100 различных зависимых библиотек, вам нужно будет получить их из соответствующих источников, а затем упомянуть их все на этапе компоновки (компилятор C не включает libssl или libwhatever, а иногда даже libc). Так что это тоже непросто.

person Christopher Schultz    schedule 15.04.2018
comment
ограничение размера комментария просто спасло всех от моей тирады о современных инструментах программирования. Думаю, я опубликую это где-нибудь в другом месте и просто дам ссылку в каком-нибудь будущем комментарии. - person Latitia Lee; 17.04.2018
comment
@LatitiaLee Обычно, просто слезая с лужайки, можно понять. - person Christopher Schultz; 17.04.2018