Web services 可用于所有Jetty web服务的外部jar

Web services 可用于所有Jetty web服务的外部jar,web-services,jetty,Web Services,Jetty,我已将外部jar添加到{jetty.home}/lib/ext,但当我在没有此jar的情况下重建war文件、部署它并重新启动web服务时,它无法找到jar,我得到: java.lang.NoClassDefFoundError 我不确定我走的是正确的道路,但本质上我想从多个web服务的war文件中删除一个jar,并让它们都通过类路径引用jar(这样就可以在不重建和部署war文件的情况下轻松更新jar) 我在/lib/ext、/lib/和/resources中进行了尝试 [root]$ java

我已将外部jar添加到{jetty.home}/lib/ext,但当我在没有此jar的情况下重建war文件、部署它并重新启动web服务时,它无法找到jar,我得到:

java.lang.NoClassDefFoundError

我不确定我走的是正确的道路,但本质上我想从多个web服务的war文件中删除一个jar,并让它们都通过类路径引用jar(这样就可以在不重建和部署war文件的情况下轻松更新jar)

我在/lib/ext、/lib/和/resources中进行了尝试

[root]$ java -jar start.jar --version
Active Options: [Server, jmx, resources, websocket]
Version Information on 15 entries in the classpath.
Note: order presented here is how they would appear on the classpath.
  changes to the OPTIONS=[option,option,...] command line option will be reflected here.
 0:      7.0.1.v20091125 | ${jetty.home}/lib/jetty-xml-7.0.1.v20091125.jar
 1:  2.5.0.v200806031605 | ${jetty.home}/lib/servlet-api-2.5.jar
 2:      7.0.1.v20091125 | ${jetty.home}/lib/jetty-http-7.0.1.v20091125.jar
 3:      7.0.1.v20091125 | ${jetty.home}/lib/jetty-continuation-7.0.1.v20091125.jar
 4:      7.0.1.v20091125 | ${jetty.home}/lib/jetty-server-7.0.1.v20091125.jar
 5:      7.0.1.v20091125 | ${jetty.home}/lib/jetty-security-7.0.1.v20091125.jar
 6:      7.0.1.v20091125 | ${jetty.home}/lib/jetty-servlet-7.0.1.v20091125.jar
 7:      7.0.1.v20091125 | ${jetty.home}/lib/jetty-webapp-7.0.1.v20091125.jar
 8:      7.0.1.v20091125 | ${jetty.home}/lib/jetty-deploy-7.0.1.v20091125.jar
 9:      7.0.1.v20091125 | ${jetty.home}/lib/jetty-servlets-7.0.1.v20091125.jar
10:      7.0.1.v20091125 | ${jetty.home}/lib/jetty-jmx-7.0.1.v20091125.jar
11:                (dir) | ${jetty.home}/resources
12:      7.0.1.v20091125 | ${jetty.home}/lib/jetty-websocket-7.0.1.v20091125.jar
13:      7.0.1.v20091125 | ${jetty.home}/lib/jetty-util-7.0.1.v20091125.jar
14:      7.0.1.v20091125 | ${jetty.home}/lib/jetty-io-7.0.1.v20091125.jar

jtTy7.0.1是<强>非常旧< /强>现在。考虑升级(当前稳定版本)

好的,回到你的问题。你没有启用
ext
选项

编辑
${jetty.home}/start.ini
并将
ext
添加到以
OPTIONS=

要知道,所有这些都是为了使您放在那里的任何jar都出现在服务器类路径上,适合服务器用于JNDI资源(例如数据库
DataSource
references)

仅仅在
${jetty.home}/lib/ext
中存在一个jar并不意味着您的WebApp可以访问它。WebApp类加载器隔离(servlet规范要求)阻止了这一点

但这一切都没有丢失,Jetty提供了将WebApp类加载器配置为在隔离层中“戳洞”的方法,允许控制单个类和/或整个包名称空间的行为

这是通过在
${Jetty.home}/webapps/
目录中的Jetty上下文XML中设置和配置
WebAppContext
完成的

您将有两件事可以配置

这是一个不能被web应用程序替换的类(或包),它们总是通过系统类加载器加载

这些类是隐藏的,不会被web应用程序使用系统类加载器加载,因此,如果web应用程序需要加载任何此类类,它必须将它们包含在其发行版中


因此,假设您添加了一个名为
${jetty.home}/lib/ext/corpcommon.jar
的文件,其包名称空间为
com.corp.common
,生成的XML文件将包含以下代码片段


...
com.corp.common。
-com.corp.common。