嵌入式码头忽略 类 打包在我的 war
embedded jetty ignoring classes packaged in my war
我正在尝试 运行 嵌入模式下的码头。它似乎忽略了我的 war 文件中捆绑的所有 classes,无论是在 WFB-INF/classes 还是 WEB-INF/lib.
下
我的启动代码:
package rfd;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.util.resource.Resource;
import org.eclipse.jetty.webapp.WebAppContext;
import org.eclipse.jetty.xml.XmlConfiguration;
public class RfdWar
{
public static void main(String[] args) throws Exception
{
System.setProperty("org.eclipse.jetty.LEVEL", "DEBUG");
Server server = new Server(8080);
org.eclipse.jetty.webapp.Configuration.ClassList classlist = org.eclipse.jetty.webapp.Configuration.ClassList.setServerDefault(server);
classlist.addAfter("org.eclipse.jetty.webapp.FragmentConfiguration", "org.eclipse.jetty.plus.webapp.EnvConfiguration", "org.eclipse.jetty.plus.webapp.PlusConfiguration");
Resource jettyEnv = Resource.newSystemResource("jetty-env.xml");
XmlConfiguration conf = new XmlConfiguration(jettyEnv.getInputStream());
Object obj = conf.configure();
WebAppContext context = (WebAppContext)obj;
context.setWar("/tmp/thewar.war");
context.setContextPath("/");
context.setParentLoaderPriority(true);
server.setHandler(context);
server.start();
server.join();
}
}
我的命令行:
export JETTYHOME=<my_jetty_home>
JHL=$JETTYHOME/lib
export CLASSPATH=.:$JHL/jetty-server-9.2.10.v20150310.jar:$JHL/jetty-util-9.2.10.v20150310.jar:$JHL/jetty-http-9.2.10.v20150310.jar:$JHL/servlet-api-3.1.jar:$JHL/jetty-io-9.2.10.v20150310.jar:$JHL/jetty-webapp-9.2.10.v20150310.jar:$JHL/jetty-servlet-9.2.10.v20150310.jar:$JHL/jetty-security-9.2.10.v20150310.jar:$JHL/jetty-xml-9.2.10.v20150310.jar:$JHL/jetty-plus-9.2.10.v20150310.jar:$JHL/jetty-jndi-9.2.10.v20150310.jar:$JHL/jsp/javax.servlet.jsp-2.3.2.jar:$JHL/jsp/javax.servlet.jsp-api-2.3.1.jar
java rfd.RfdWar
服务器确实可以正确启动并且肯定会读取 war 中打包的 web.xml。但是,当我尝试访问 URL 时,我收到一条错误消息,我的 class 与 war 一起打包丢失了。
我还需要做些什么来告诉码头兑现 war 中打包的 classes 吗?
这个命令...
context.setParentLoaderPriority(true);
基本上是说,当 webapp 尝试加载 class 时,首先检查服务器 classpath,然后是 webapp 的 classpath。
所以如果你碰巧在两个地方有相同的classes,将使用服务器版本,忽略webapp上的。
将此设置为 false
以获得诚实的 servlet 规范行为,所有 WebApp classloader 隔离。
此外,这是错误的,在很多方面都是错误的。
Resource jettyEnv = Resource.newSystemResource("jetty-env.xml");
XmlConfiguration conf = new XmlConfiguration(jettyEnv.getInputStream());
Object obj = conf.configure();
WebAppContext context = (WebAppContext)obj;
加载 jetty-env.xml
的正确方法是使用从适当的 class 加载程序和线程范围内建立执行此功能的 WebApp 和 ClassList 配置。
请参阅 https://www.eclipse.org/jetty/documentation/current/jndi-embedded.html
处的文档
之前的回答是
我正在尝试 运行 嵌入模式下的码头。它似乎忽略了我的 war 文件中捆绑的所有 classes,无论是在 WFB-INF/classes 还是 WEB-INF/lib.
下我的启动代码:
package rfd;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.util.resource.Resource;
import org.eclipse.jetty.webapp.WebAppContext;
import org.eclipse.jetty.xml.XmlConfiguration;
public class RfdWar
{
public static void main(String[] args) throws Exception
{
System.setProperty("org.eclipse.jetty.LEVEL", "DEBUG");
Server server = new Server(8080);
org.eclipse.jetty.webapp.Configuration.ClassList classlist = org.eclipse.jetty.webapp.Configuration.ClassList.setServerDefault(server);
classlist.addAfter("org.eclipse.jetty.webapp.FragmentConfiguration", "org.eclipse.jetty.plus.webapp.EnvConfiguration", "org.eclipse.jetty.plus.webapp.PlusConfiguration");
Resource jettyEnv = Resource.newSystemResource("jetty-env.xml");
XmlConfiguration conf = new XmlConfiguration(jettyEnv.getInputStream());
Object obj = conf.configure();
WebAppContext context = (WebAppContext)obj;
context.setWar("/tmp/thewar.war");
context.setContextPath("/");
context.setParentLoaderPriority(true);
server.setHandler(context);
server.start();
server.join();
}
}
我的命令行:
export JETTYHOME=<my_jetty_home>
JHL=$JETTYHOME/lib
export CLASSPATH=.:$JHL/jetty-server-9.2.10.v20150310.jar:$JHL/jetty-util-9.2.10.v20150310.jar:$JHL/jetty-http-9.2.10.v20150310.jar:$JHL/servlet-api-3.1.jar:$JHL/jetty-io-9.2.10.v20150310.jar:$JHL/jetty-webapp-9.2.10.v20150310.jar:$JHL/jetty-servlet-9.2.10.v20150310.jar:$JHL/jetty-security-9.2.10.v20150310.jar:$JHL/jetty-xml-9.2.10.v20150310.jar:$JHL/jetty-plus-9.2.10.v20150310.jar:$JHL/jetty-jndi-9.2.10.v20150310.jar:$JHL/jsp/javax.servlet.jsp-2.3.2.jar:$JHL/jsp/javax.servlet.jsp-api-2.3.1.jar
java rfd.RfdWar
服务器确实可以正确启动并且肯定会读取 war 中打包的 web.xml。但是,当我尝试访问 URL 时,我收到一条错误消息,我的 class 与 war 一起打包丢失了。
我还需要做些什么来告诉码头兑现 war 中打包的 classes 吗?
这个命令...
context.setParentLoaderPriority(true);
基本上是说,当 webapp 尝试加载 class 时,首先检查服务器 classpath,然后是 webapp 的 classpath。
所以如果你碰巧在两个地方有相同的classes,将使用服务器版本,忽略webapp上的。
将此设置为 false
以获得诚实的 servlet 规范行为,所有 WebApp classloader 隔离。
此外,这是错误的,在很多方面都是错误的。
Resource jettyEnv = Resource.newSystemResource("jetty-env.xml");
XmlConfiguration conf = new XmlConfiguration(jettyEnv.getInputStream());
Object obj = conf.configure();
WebAppContext context = (WebAppContext)obj;
加载 jetty-env.xml
的正确方法是使用从适当的 class 加载程序和线程范围内建立执行此功能的 WebApp 和 ClassList 配置。
请参阅 https://www.eclipse.org/jetty/documentation/current/jndi-embedded.html
处的文档之前的回答是