我正在尝试使用小型Java Web框架http://www.sparkjava.com/。说明告诉你将它添加为Maven依赖(已完成),但是当我mvn package
时,我得到一个未找到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>
编辑:跟踪
λ 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!";
}
});
}
}
答案 0 :(得分:13)
对我来说有什么用呢:
mvn package
mvn exec:java -Dexec.mainClass="com.your.class.with.main.method"
答案 1 :(得分:4)
在尝试将应用程序部署到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
运行您的应用程序
答案 2 :(得分:1)
好的,所以maven package
本身没有抛出异常;这是执行。 Maven生成的包不能包含运行应用程序所需的所有内容。 (如果你对它所包含的确切内容感到好奇,你可以解压缩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-api-3.0.pre4.jar:lib/slf4j-log4j12-1.6.1.jar com.bernsteinbear.myapp.App
注意你必须把路径弄好。这假设spark-dependencies zip文件解压缩到lib文件夹。
如果仍然没有,或者提供其他信息或提供反馈,您也可以直接ping作者。