Java 如何将jar放置在jetty类路径上的jetty/lib中?

Java 如何将jar放置在jetty类路径上的jetty/lib中?,java,jetty,classpath,Java,Jetty,Classpath,我有Jetty Jetty-9.2.3.v20140905 我的理解是lib/jar或lib/ext中的jar自动位于类路径上,但这可能是jetty 8的旧行为 我正在尝试部署带有WebSocket的webapp。由于我在webapps目录中部署了WAR文件,jetty不断抱怨它在jetty/lib目录中找不到jar(jetty-http、jetty-io、jetty-security、jetty-server、jetty-servlet、jetty-util是我的webapp无法找到的) 在执

我有Jetty Jetty-9.2.3.v20140905

我的理解是lib/jar或lib/ext中的jar自动位于类路径上,但这可能是jetty 8的旧行为

我正在尝试部署带有WebSocket的webapp。由于我在webapps目录中部署了WAR文件,jetty不断抱怨它在jetty/lib目录中找不到jar(jetty-http、jetty-io、jetty-security、jetty-server、jetty-servlet、jetty-util是我的webapp无法找到的)

在执行--module ext时,lib/ext中放置的jar也不会被拾取

我如何解决这个问题

为了回答以下问题,(编辑原始问题),我已尝试启用服务器模块,其server.mod文件包含以下行:

[lib]
lib/servlet-api-3.1.jar
lib/jetty-schemas-3.1.jar
lib/jetty-http-${jetty.version}.jar
lib/jetty-server-${jetty.version}.jar
lib/jetty-xml-${jetty.version}.jar
lib/jetty-util-${jetty.version}.jar
lib/jetty-io-${jetty.version}.jar
从命令行,我知道

java -jar start.jar --module=server jetty.port=8182
结果是:

2014-10-30 15:26:13.907:WARN:oejuc.AbstractLifeCycle:main: FAILED   
org.eclipse.jetty.annotations.ServletContainerInitializersStarter@2635068e: 
java.lang.NoClassDefFoundError: org/eclipse/jetty/server/Handler
java.lang.NoClassDefFoundError: org/eclipse/jetty/server/Handler
org.eclipse.jetty.server.Handler就在我的jetty/lib目录下的jetty服务器jar中

可能jetty.version或jetty.base变量不正确

当我表演

--list-classpath

我确实看到了lib目录中的所有jar

您正在阅读哪些文档?(请连结)

整个
start.config
概念只存在于Jetty 8和更早版本中

目前的文件载于

该文本对Jetty
9.2.3.v20140905

在服务器类路径中同时拥有
lib/
中的所有jar从来没有好的理由。事实上,这将导致一个无效的环境,因为您可以更改几个核心技术的不同实现(如jsp、jstl和javax.el)。
lib/
中还有一些库需要第三方可选库(如npn、alpn)才能运行,这需要您在下载许可证之前确认许可证

{jetty.home}/lib
和/或
{jetty.base}/lib
加载哪些库取决于您在jetty实例配置中启用的模块

要了解startup、start.jar、命令行、模块、lib、xml配置、配置属性、
{jetty.base}
{jetty dir}
{jetty.home}
,请参阅

解决您关于启动jetty和webapps的具体问题。 (同样,这些都记录在上面的“启动文档”URL中)

下面是一个使用
{jetty.home}
本身的快速示例(不再推荐,但仍然有效):

#打开分发包
[~]$unzip jetty-distribution-9.2.3.v20140905
[~]$cd jetty-distribution-9.2.3.v20140905
#把你的战争复制到位
[jetty-distribution-9.2.3.v20140905]$cp~/Projects/mywebapp.war webapps/
#运行码头
[jetty-distribution-9.2.3.v20140905]$java-jar start.jar
现在,使用
{jetty.base}
获得更合适的方法:

#打开分发包
[~]$unzip jetty-distribution-9.2.3.v20140905
#创建一个{jetty.base}目录来存放您的配置
[~]$mkdir myappbase
[~]$cd myappbase
#因为这是一个新的{jetty.base},所以让我们初始化它
[myappbase]$java-jar../jetty-distribution-9.2.3.v20140905/start.jar\
--添加到start=http、日志、部署、jsp、ext、资源
信息:http在${jetty.base}/start.ini中初始化(追加)
信息:服务器在${jetty.base}/start.ini中初始化(追加)
信息:日志在${jetty.base}/start.ini中初始化(追加)
MKDIR:${jetty.base}/logs
信息:在${jetty.base}/start.ini中初始化部署(追加)
MKDIR:${jetty.base}/webapps
…(剪断)。。。
MKDIR:${jetty.base}/lib
MKDIR:${jetty.base}/lib/ext
信息:资源在${jetty.base}/start.ini中初始化(追加)
MKDIR:${jetty.base}/resources
#让我们看看现在有什么
[myappbase]$ls-F
lib/logs/resources/start.ini webapps/
#将您的webapp复制到位
[myappbase]$cp~/Projects/mywebapp.war webapps/
#运行码头
[myappbase]$java-jar../jetty-distribution-9.2.3.v20140905/start.jar

我猜该文本来自Jetty 8。我猜该文本来自Jetty 8。Jetty.home/lib中的所有内容都在类路径上是否不再是这样?我需要做什么才能使jetty.home/lib目录中的每个lib都位于类路径上?在阅读文档时,我将lib中的所有内容复制到ext中,并在启动jetty时从命令行执行--module=ext,但没有成功。我还尝试了--module=http和--module=server,两者都没有效果。如果我试图使用这些JAR中的类,jetty将无法加载war,因为它找不到这些类。
{jetty.home}/lib/
中的所有JAR都位于服务器类路径中,这是没有充分理由的。而强迫它也将一事无成。更新您的问题,使其更具体地说明您试图达到的目标,例如“我想使用JSP和WebSocket部署一个webapp”。感谢您的详细解释。但是,无论我修改jetty.home start.ini以包含--module=server,还是按照上面描述的方法创建我自己的特定于应用程序的jetty部署并将服务器初始化为模块,甚至只是尝试通过命令行添加服务器模块,它都会失败,说java.lang.ClassNotFoundException:org.eclipse.jetty.server.Handler,我可以在jetty-server-9.2.3.v20140905.jar中看到org.eclipse.jetty.server.Handler.class,在server.mod中,它在[lib]中列出lib/jetty-server-${jetty.version}.jar出现此消息的唯一原因是您自己的Web应用程序正在使用org.eclipse.jetty.server.Handler(它不能)