Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spark Java和类路径_Java_Maven_Web_Spark Java - Fatal编程技术网

Spark Java和类路径

Spark Java和类路径,java,maven,web,spark-java,Java,Maven,Web,Spark Java,我正试图从一个小型Java web框架开始。说明告诉您将其添加为Maven依赖项(完成),但是当我mvn包时,我会得到一个未找到spark/Route的类def 我想这是因为Spark不在我的类路径中。我如何添加它?它会进入pom.xml 编辑:对不起,这是我的pom.xml: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

我正试图从一个小型Java web框架开始。说明告诉您将其添加为Maven依赖项(完成),但是当我
mvn包
时,我会得到一个未找到spark/Route的类def

我想这是因为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>
aa和来源(主页上的示例):


好的,
maven包本身没有抛出异常;那是行刑。Maven生成的包不能包含运行应用程序所需的所有内容。(如果您对jar的确切内容感到好奇,您可以解压它。)因此,现在的问题是要么将Maven包含到打包的类路径中(我不建议您费心处理这个问题),要么只是在运行时类路径中包含额外的jar(看起来像
-cp a.jar:b.jar:…
)。我怀疑该模块具有所有缺少的依赖项。(不幸的是,自述文件对此并不十分清楚。)

假设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作者。

什么对我有效,使其运行:

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

我在尝试将应用程序部署到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>

要运行应用程序

请共享您的pom.xml pom.xml从Maven的角度来看是正确的(假设Spark本身没有bug)。您可以共享堆栈跟踪和一些源代码吗?你试过来源的例子了吗?@威尔,给你。前页的例子。我如何理解“jetty webapp…”字符串?spark依赖项中的jar。只需解压缩zip文件并查看一下。很抱歉--我刚刚更正了spark dependencies的链接,以防您遇到麻烦。我已经用确切的JAR名称(从当前spark dependencies开始)更新了答案。有没有办法创建一个完整的独立JAR?是的,使用Maven。请参阅,了解需要复制的依赖项,以及关于如何使用Maven将依赖项合并到JAR中的社区Wiki答案:
mvn package
mvn exec:java -Dexec.mainClass="com.your.class.with.main.method"
<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