我已经添加了我想要的外部jar {jetty.home} / lib / ext但是当我重建没有这个jar的war文件时,部署它,然后重新启动web服务,它无法找到罐子,我得到了:
java.lang.NoClassDefFoundError
我不确定我是不是走正确的道路,但基本上我想从多个网络服务的war文件中删除一个jar,让他们都通过类路径引用jar(所以它可以轻松更新,无需重建和部署war文件。
我已经尝试过/ 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
答案 0 :(得分:1)
Jetty 7.0.1现在非常老了。考虑升级。 (9.2.5.v20141112是当前的稳定版本)
好的,回到你的问题。您没有启用ext
选项。
修改您的${jetty.home}/start.ini
并将ext
添加到以OPTIONS=
知道所有这一切都会使你放在那里的任何jar存在于服务器类路径上,适合服务器用于JNDI资源(例如数据库DataSource
引用)之类的东西。
${jetty.home}/lib/ext
中仅存在一个jar并不意味着它可以通过您的webapps访问。 WebApp ClassLoader隔离(servlet规范要求)可以防止这种情况。
但是并没有丢失,Jetty提供了将WebApp ClassLoader配置为"戳孔的方法。进入这个隔离层,允许控制各个类和/或整个包命名空间的行为。
这是通过在WebAppContext
目录中的Jetty Context XML中设置和配置${jetty.home}/webapps/
来完成的。
您可以配置两件事。
这是一个无法由Web应用程序替换的类(或包),它们始终通过系统类加载器加载
这些类是隐藏的,不会被Web应用程序使用系统类加载器加载,因此如果Web应用程序需要加载任何此类类,则必须将它们包含在其分发中。
因此,假设您添加了一个名为${jetty.home}/lib/ext/corpcommon.jar
的文件,并且它的包名称空间为com.corp.common
,您生成的XML文件将包含以下代码段
<Configure class="org.eclipse.jetty.webapp.WebAppContext">
...
<!-- webapp cannot override these, use the server version always,
even if the webapp has its own copy -->
<Call name="addSystemClass">
<Arg>com.corp.common.</Arg>
</Call>
<!-- expose com.corp.common to webapp -->
<Call name="addServerClass">
<Arg>-com.corp.common.</Arg>
</Call>