我正在尝试让Maven自动下载jetty-start的所有依赖项,所以我运行它:
java start.jar etc/jetty.xml
但是当我这样做时:
java start.jar --list-options
我得到几个缺少的模块,我必须手动添加为我的Maven文件的依赖项。我已经尝试添加它们,但我仍然无法找到servlet-api
的适当版本,它将提供javax.servlet.http.HttpServletResponse
,即使为jetty-servlet
下载的jar包含javax/servlet/http/HttpServletResponse.class
。这是错误:
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.eclipse.jetty.start.Main.invokeMain(Main.java:457)
at org.eclipse.jetty.start.Main.start(Main.java:602)
at org.eclipse.jetty.start.Main.main(Main.java:82)
Caused by: java.lang.NoClassDefFoundError: javax/servlet/http/HttpServletResponse
at java.lang.Class.getDeclaredConstructors0(Native Method)
at java.lang.Class.privateGetDeclaredConstructors(Class.java:2389)
at java.lang.Class.getConstructor0(Class.java:2699)
at java.lang.Class.newInstance0(Class.java:326)
at java.lang.Class.newInstance(Class.java:308)
at org.eclipse.jetty.xml.XmlConfiguration$JettyXmlConfiguration.configure(XmlConfiguration.java:333)
at org.eclipse.jetty.xml.XmlConfiguration.configure(XmlConfiguration.java:291)
at org.eclipse.jetty.xml.XmlConfiguration$1.run(XmlConfiguration.java:1203)
at java.security.AccessController.doPrivileged(Native Method)
at org.eclipse.jetty.xml.XmlConfiguration.main(XmlConfiguration.java:1138)
... 7 more
Caused by: java.lang.ClassNotFoundException: javax.servlet.http.HttpServletResponse
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
... 17 more
我已尝试将org.eclipse.jetty.aggregate:jetty-all
包添加到我的依赖项列表中,但java start.jar --list-options
未检测到其中的包,因此无效。
有几页文档很有帮助,但没有具体回答这个问题:
答案 0 :(得分:5)
你没有。
码头启动工件用于码头分布。使用jetty-start工件时没有自动下载依赖项,因为假设您在本地磁盘上进行分发,并且只是尝试将服务器启动的类路径编织在一起。
如果您希望在构建期间启动webapp以进行测试或构建,那么使用maven,您可以使用jetty-maven-plugin。使用该插件,您将获得所需依赖项的lionshare,除非您尝试执行需要其他依赖项的特定内容,在这种情况下,您将它们添加到插件声明的部分。
喝彩!
答案 1 :(得分:2)
您需要同时jetty-start
和jetty-all
执行您要执行的操作 - 尽管您也可以使用比jetty-all
更具体的工件集。
请注意,使用类路径上的一系列工件,您无法使用java -jar
,因此需要直接运行org.eclipse.jetty.start.Main
例如:
java -cp start.jar:jetty-all.jar org.eclipse.jetty.start.Main --list-options
您可能想要创建一个包含所需JAR(作为Maven依赖项检索)的程序集,然后添加一个启动脚本来指向它们。
你可以在这里找到一个更完整的例子,它使用程序集插件和Java Service Wrapper来运行Jetty:http://svn.apache.org/viewvc/archiva/trunk/archiva-jetty/pom.xml?revision=1307001&view=markup
答案 2 :(得分:0)
它可能无法解答您的问题,但这是我如何在main()方法中启动Jetty。我创建了一个包含.war文件的已组装应用程序,并扫描文件系统以查找战争,并使用已构建并包含在分发zip文件中的war的副本启动Jetty。
String warLocation = locateWarFile();
WebAppContext webapp = new WebAppContext();
webapp.setWar(warLocation);
webapp.setContextPath("/");
webapp.setConfigurations(new Configuration[] {
new WebInfConfiguration(),
new EnvConfiguration(),
new WebXmlConfiguration(),
});
// launch Jetty's web server and serve requests..
Server server = new Server();
Connector connector=new SelectChannelConnector();
connector.setPort(Integer.getInteger("jetty.port",8080));
server.setConnectors(new Connector[]{connector});
server.setHandler(webapp);
server.start();
为记录,我的maven依赖:
<dependency>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty</artifactId>
</dependency>
<dependency>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-util</artifactId>
</dependency>
<dependency>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-naming</artifactId>
</dependency>
<dependency>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-plus</artifactId>
</dependency>
答案 3 :(得分:-1)
以下POM文件配置为使用Jetty下载并运行Apache Solr Web应用程序:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.myspotontheweb</groupId>
<artifactId>solr</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr</artifactId>
<version>3.6.0</version>
<type>war</type>
</dependency>
<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-velocity</artifactId>
<version>3.6.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>8.1.3.v20120416</version>
<configuration>
<systemProperties>
<systemProperty>
<name>solr.solr.home</name>
<value>${basedir}/src/main/solr/home</value>
</systemProperty>
<systemProperty>
<name>solr.data.dir</name>
<value>${project.build.directory}/solr/data</value>
</systemProperty>
</systemProperties>
</configuration>
<executions>
<execution>
<phase>compile</phase>
<goals>
<goal>run-exploded</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
应用程序从Maven启动如下:
mvn compile
Solr需要其他配置文件。有关详细信息,请参阅doco。
$ tree
.
|-- pom.xml
`-- src
`-- main
`-- solr
`-- home
`-- conf
|-- admin-extra.html
|-- elevate.xml
|-- mapping-FoldToASCII.txt
|-- mapping-ISOLatin1Accent.txt
|-- protwords.txt
|-- schema.xml
|-- scripts.conf
|-- solrconfig.xml
|-- spellings.txt
|-- stopwords_en.txt
|-- stopwords.txt
`-- synonyms.txt