2016-04-24 76 views
0

我在Windows平台上使用Eclipse在Setting up Spark with Maven中试过这个简单的“Hello World”web应用程序(使用maven设置)。如果它是从Eclipse运行的,它会很好地工作。部署简单的Java Spark网络应用程序

但是我想实现的是让它运行在云中的CentOS 6.x中,我通过ssh使用putty访问它。我已经在CentOS中安装了JDK 8和maven。我没有安装任何应用程序服务器(没有Tomcat等),因为我希望Spark应用程序能够与其嵌入式AS(即Jetty)一起运行。

我还没有找到如何将这种Spark应用程序从Eclipse/Maven/Windows部署到云中的CentOS服务器。我发现了一些教程,解释了如何在heraku上部署,甚至是如何将它部署到不同的AS(不使用嵌入的),但没有像我想要实现的那样简单,如解释的。

在Eclipse中,如果我将项目导出为jar,并将jar上传到CentOS服务器,使用'java -jar appname.jar'运行它不起作用,它似乎没有Spark库,也没有嵌入式码头。

任何帮助?谢谢。

+0

在服务器上运行'java -jar appname.jar'的输出是什么? – Casey

+0

'在线程中发生异常“main”java.lang.BootstrapMethodError:java.lang.NoClassDefFoundError:spark/Request at chatapp.Main.main(Main.java:8) 引发:java.lang.NoClassDefFoundError:spark/Request ... 1更多 引发:java.lang.ClassNotFoundException:spark.Request at java.net.URLClassLoader.findClass(URLClassLoader.java:381) at java.lang.ClassLoader.loadClass(ClassLoader.java:424 ) at sun.misc.Launcher $ AppClassLoader.loadClass(Launcher.java:331) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 1 more' –

+0

因此,它看起来不是罐子包含Spark库,如我所说。 –

回答

2

看完有关maven的视频教程后,我找到了解决方案。 首先,您需要将以下添加到xml.pom文件在你的Maven项目在Eclipse:

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>2.3.2</version> 
      <configuration> 
       <source>1.8</source> 
       <target>1.8</target> 
      </configuration> 
     </plugin> 
     <plugin> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <executions> 
       <execution> 
        <phase>package</phase> 
        <goals> 
         <goal>single</goal> 
        </goals> 
       </execution> 
      </executions> 
      <configuration> 
       <descriptorRefs> 
        <!-- This tells Maven to include all dependencies --> 
        <descriptorRef>jar-with-dependencies</descriptorRef> 
       </descriptorRefs> 
       <archive> 
        <manifest> 
         <mainClass>chatapp.Main</mainClass> 
        </manifest> 
       </archive> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

它告诉行家在哪里可以找到主类是很重要的。在我的例子中,我命名了我的应用程序chatapp(因为我打算将这个简单的'Hello World'应用程序发展为一个聊天应用程序),包含main方法的Main类也被命名为Main,它位于包chatapp下,因此它是chatapp.Main。您可以在<dependencies>节点后面添加这些行。因此,POM文件应该是这样的:

<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/xsd/maven-4.0.0.xsd"> 
<modelVersion>4.0.0</modelVersion> 
<groupId>com.orboan</groupId> 
<artifactId>chatapp</artifactId> 
<version>0.0.1-SNAPSHOT</version> 
<packaging>jar</packaging> 
<name>new-spark-project</name> 
<dependencies> 
    <dependency> 
     <groupId>com.sparkjava</groupId> 
     <artifactId>spark-core</artifactId> 
     <version>2.3</version> 
    </dependency> 
</dependencies> 
<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>2.3.2</version> 
      <configuration> 
       <source>1.8</source> 
       <target>1.8</target> 
      </configuration> 
     </plugin> 
     <plugin> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <executions> 
       <execution> 
        <phase>package</phase> 
        <goals> 
         <goal>single</goal> 
        </goals> 
       </execution> 
      </executions> 
      <configuration> 
       <descriptorRefs> 
        <!-- This tells Maven to include all dependencies --> 
        <descriptorRef>jar-with-dependencies</descriptorRef> 
       </descriptorRefs> 
       <archive> 
        <manifest> 
         <mainClass>chatapp.Main</mainClass> 
        </manifest> 
       </archive> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

现在,重要的是不要使用Eclipse的导出工具(右键单击该项目在Package Explorer,并从上下文菜单中不选择“导出”),就像您想要将java项目导出到jar文件以进行部署时一样。这将生成一个jar文件,但不需要所有的依赖关系。

相反,你必须选择(从上下文菜单)Run As> Maven Install。这将生成(从pom.xml)相应的jar文件,包含所有需要的依赖关系,在我的例子中为chatapp-0.0.1-SNAPSHOT-jar-with-dependencies.jar

然后,将该jar文件上传到CentOS服务器,并使用java -jar
chatapp-0.0.1-SNAPSHOT-jar-with-dependencies.jar
运行它。它现在应该工作。