1

我试图让 Maven 自动下载 jetty-start 的所有依赖项,所以我运行这个:

java start.jar etc/jetty.xml

但是当我这样做时:

java start.jar --list-options

我得到了几个缺少的模块,我必须手动将它们作为依赖项添加到我的 Maven 文件中。我已经尝试添加它们,但我一直无法找到合适的版本servlet-apijavax.servlet.http.HttpServletResponse即使下载的 jarjetty-servlet包含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,因此无法正常工作。

有几页文档很有帮助,但没有具体回答这个问题:

4

4 回答 4

5

你没有。

jetty-start 工件用于 jetty 分发。使用 jetty-start 工件时不会自动下载依赖项,因为假设您在本地磁盘上有分发,并且只是尝试将类路径组合在一起以启动服务器。

使用 maven,如果您希望在构建期间启动 web 应用程序以进行测试或构建,您可以使用 jetty-maven-plugin。使用该插件,您将获得所需依赖项的大部分,除非您尝试执行需要额外依赖项的特定操作,在这种情况下,您将它们添加到插件声明的部分。

干杯!

于 2012-05-02T13:53:01.377 回答
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 =标记

于 2012-05-03T02:42:15.700 回答
0

它可能无法回答您的问题,但这是我在 main() 方法中启动 Jetty 的方式。我创建了一个包含 .war 文件的组装应用程序,并扫描文件系统以找到战争,并使用构建并包含在分发 zip 文件中的战争副本启动 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>
于 2012-05-03T02:48:55.270 回答
-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需要额外的配置文件。有关详细信息,请参阅文档。

$ 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
于 2012-05-02T21:29:00.753 回答