2016-03-17 23 views
1

我目前有一個基於java的maven項目,在運行時,它會啓動jetty服務器並將web應用程序加載到localhost:4567。我想將此應用程序部署到CentOS虛擬機上的服務器,但我不確定從哪裏開始。目前CentOS已經運行了Apache服務器,並安裝了Maven,DB和其他依賴項。無法使用.jar加載導入的類

我將項目打包爲.jar,但目前無法運行.jar文件。當通過命令提示符或IDE運行jar文件時,我得到一個異常「java.lang.NoClassDefFoundError:spark/Route」。

的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/xsd/maven-4.0.0.xsd"> 
<modelVersion>4.0.0</modelVersion> 

<groupId>com.labfinder</groupId> 
<artifactId>labfinder</artifactId> 
<version>1.0-SNAPSHOT</version> 
<packaging>jar</packaging> 

<name>LabFinder</name> 
<url>http://maven.apache.org</url> 

<properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
</properties> 

<repositories> 
    <repository> 
     <id>Spark repository</id> 
     <url>http://www.http://sparkjava.com/nexus/content/repositories/spark/</url> 
    </repository> 
</repositories> 

<build> 
    <plugins> 
     <plugin> 
      <!-- Build an executable JAR --> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-jar-plugin</artifactId> 
      <version>2.4</version> 
      <configuration> 
       <archive> 
        <manifest> 
         <addClasspath>true</addClasspath> 
         <mainClass>com.labfinder.Main</mainClass> 
        </manifest> 
       </archive> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

<dependencies> 
    <dependency> 
     <groupId>org.mongodb</groupId> 
     <artifactId>mongodb-driver</artifactId> 
     <version>3.1.0</version> 
    </dependency> 
    <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>2.3</version> 
    </dependency> 
    <dependency> 
     <groupId>org.freemarker</groupId> 
     <artifactId>freemarker</artifactId> 
     <version>2.3.23</version> 
    </dependency> 
    <dependency> 
     <groupId>commons-collections</groupId> 
     <artifactId>commons-collections</artifactId> 
     <version>3.2.1</version> 
    </dependency> 
</dependencies> 

據我知道我不應該把星火的Java到類路徑。任何人都知道這裏發生了什麼?

+0

什麼是與啓動虛擬機上的罐子的問題? Jetty默認在端口8080上運行,所以與在端口80上運行的Apache沒有衝突。 – f1sh

+0

我刪除了在Apache上提到的問題,不會導致問題。 –

回答

2

您應該使用maven-assembly-plugin構建一個包含依賴關係的可執行jar包,也稱爲fat jar。

取而代之的是Maven的JAR-插件,請嘗試使用在你的pom.xml如下:

   <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-assembly-plugin</artifactId> 
        <version>2.4.1</version> 
        <executions> 
         <execution> 
          <phase>package</phase> 
          <goals> 
           <goal>single</goal> 
          </goals> 
          <configuration> 
           <finalName>${project.artifactId}</finalName> 
           <attach>false</attach> 
           <descriptorRefs> 
            <descriptorRef>jar-with-dependencies</descriptorRef> 
           </descriptorRefs> 
           <archive> 
            <manifest> 
             <mainClass>com.labfinder.Main</mainClass> 
            </manifest> 
           </archive> 
          </configuration> 
         </execution> 
        </executions> 
       </plugin> 
+0

哦,我的上帝終於修好了。 'mvn package'現在創建2個獨立的.jar文件,但並不是真正的問題。謝謝 –

+1

2罐是完全正常的。名爲'$ {project.artifactId} .jar'的第一個jar只是包含您的應用程序類的jar。這是由maven核心生成的,因爲你已經定義了' jar'。另一個名爲'$ {project.artifactId} -jar-with-dependencies.jar的jar是'maven-assembly-plugin'生成的jar,包含了所有的依賴關係。 –

相關問題