【问题标题】:Spark Java and the classpathSpark Java 和类路径
【发布时间】:2014-04-02 10:42:38
【问题描述】:

我正在尝试从 http://www.sparkjava.com/ 开始,这是一个小型 Java Web 框架。说明告诉您将其添加为 Maven 依赖项(完成),但是当我 mvn package 时,我得到一个类 def not found for spark/Route。

我认为这是来自 Spark 不在我的类路径中。我怎样才能添加它?它会进入pom.xml吗?

编辑:对不起,这是我的pom.xml

<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.bernsteinbear.myapp</groupId>
  <artifactId>myapp</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>myapp</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>com.sparkjava</groupId>
      <artifactId>spark-core</artifactId>
      <version>1.1</version>
    </dependency>
  </dependencies>
</project>

编辑:跟踪

λ chaos myapp → java -cp target/myapp-1.0-SNAPSHOT.jar com.bernsteinbear.myapp.App
Exception in thread "main" java.lang.NoClassDefFoundError: spark/Route
Caused by: java.lang.ClassNotFoundException: spark.Route
    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:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)

aaa 和来源(来自主页的示例):

λ chaos myapp → cat src/main/java/com/bernsteinbear/myapp/App.java
/**
 * Hello world!
 *
 */

package com.bernsteinbear.myapp;
import spark.*;
import static spark.Spark.*;

public class App {

    public static void main(String[] args) {

    get(new Route("/hello") {
        @Override
        public Object handle(Request request, Response response) {
            return "Hello World!";
        }
        });

    }

}

【问题讨论】:

  • 请分享你的 pom.xml
  • pom.xml 从 Maven 的角度来看是正确的(假设 Spark 本身没有错误)。你能分享堆栈跟踪和你的一些来源吗?您是否尝试过源代码中的示例?
  • @Will 你来了。来自首页的示例

标签: java maven web spark-java


【解决方案1】:

什么对我有用才能让它运行:

mvn package
mvn exec:java -Dexec.mainClass="com.your.class.with.main.method"

【讨论】:

    【解决方案2】:

    我在尝试将应用程序部署到 Heroku 时遇到了同样的问题。我将以下内容添加到我的 POM.xml 中。此插件可确保将 Maven 依赖项复制到您的应用程序。

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>2.4</version>
                <executions>
                    <execution>
                        <id>copy-dependencies</id>
                        <phase>package</phase>
                        <goals><goal>copy-dependencies</goal></goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
    

    在这之后你可以继续运行

    java -cp target/classes:"target/dependency/*" com.bernsteinbear.myapp.App
    

    运行您的应用程序

    【讨论】:

      【解决方案3】:

      好的,所以maven package 本身并没有抛出异常;这是执行。 Maven 生成的包不能包含运行应用程序所需的一切。 (如果您对 jar 中包含的确切内容感到好奇,您可以解压缩该 jar。)因此,现在只需将 Maven dependencies 包含到您打包的类路径中(我不一定建议您为此烦恼),或者只是简单地在你的运行时类路径中包含额外的 JAR(Unix 看起来像 -cp a.jar:b.jar:...)。我怀疑spark-dependencies 模块缺少所有依赖项。 (不幸的是,自述文件对此不是很清楚。)

      假设 spark-dependencies 模块就足够了,您只需这样做:

      java -cp target/myapp-1.0-SNAPSHOT.jar:lib/jetty-webapp-7.3.0.v20110203.jar:lib/log4j-1.2.14.jar:lib/slf4j-api-1.6.1.jar:lib/servlet-ap‌​i-3.0.pre4.jar:lib/slf4j-log4j12-1.6.1.jar com.bernsteinbear.myapp.App
      

      请注意,您必须正确设置路径。这是假设 spark-dependencies zip 文件已解压缩到 lib 文件夹。

      如果还是不行,或者想了解更多信息或提供反馈,您也可以直接 ping 作者。

      【讨论】:

      • 嗯。如何找出“jetty-webapp ...”字符串?
      • spark-dependencies 中的 JAR。只需解压缩 zip 文件并查看。抱歉——我刚刚更正了 spark-dependencies 的链接,以防你拖了后腿。
      • 我已经用确切的 JAR 名称更新了答案(截至当前 spark-dependencies)。
      • 有没有办法创建一个完整的独立JAR?
      • 是的,使用 Maven。有关您需要复制的依赖项,请参阅 github.com/perwendel/spark/blob/master/pom.xml,以及有关如何使用 Maven 将依赖项合并到 JAR 中的社区 Wiki 答案:stackoverflow.com/questions/574594/…
      猜你喜欢
      • 1970-01-01
      • 2017-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-13
      • 1970-01-01
      • 2017-06-04
      相关资源
      最近更新 更多