Java sparks and class paths

I am trying to run http://www.sparkjava.com/ , a small Java web infrastructure. The instructions say that you add it as a Maven (done) dependency, but when mvn packageI get a def not found class for spark / Route.

I guess this is from Spark, not in my class path. How can i add it? Will it go in pom.xml?

EDIT: Sorry, here's mine 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>

EDIT: Trace

λ 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)

aaaand source (example from the home page):

λ 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!";
        }
        });

    }

}
+4
source share
3 answers

What works for me:

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

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

+4

, maven package ; . , Maven, . ( , , .) , Maven classpath ( ), JAR ( Unix -cp a.jar:b.jar:...). , . ( , readme .)

, , :

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

Please note that you must choose the right path. This assumes that the zip file with spark dependencies is unpacked into the lib folder.

If you have not done so already, either for more information or for feedback, you can also directly direct the author.

+1
source

All Articles