Java 如何将jar放置在jetty类路径上的jetty/lib中?
我有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文件包含以下行: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无法找到的) 在执
[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和更早版本中
目前的文件载于
该文本对Jetty9.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(它不能)