2016-04-13 4 views
1

ビルドツールとしてmavenを使ってspring-boot appを作成しています。吹き出しへの春ブート戦の展開

私は、.warファイルを作成し、それを専用のjettyインスタンスに配備したいという問題があります。

私が手にエラーは次のとおりです。

は[javax.sql.DataSourceの]インスタンス化に失敗しました:ファクトリメソッド「データソース」は、例外を投げました。ネストされた例外は、java.lang.NoClassDefFoundError:org/apache/juli/logging/LogFactoryです。

のpom.xml:

<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-jdbc</artifactId> 
    <exclusions> 
     <exclusion> 
      <groupId>org.apache.tomcat</groupId> 
      <artifactId>tomcat-juli</artifactId> 
     </exclusion> 
    </exclusions> 
</dependency> 
私は春・ブートstarter.jdbcで依存性があるLIBを除外してorg.apache.juli LIBへの依存関係を削除する場合

この

が解消されます

このライブラリを除いて、現在のバージョンのjetty(jetty-distribution-9.3.8.v20160314)で戦争が行われます。もつとも

:私はそれが次のメッセージでcraches main、組み込み桟橋サーバを使用してJAVA APP、すなわちを起動しよう:

Failed to instantiate [javax.sql.DataSource]: Factory method 'dataSource' threw exception; nested exception is java.lang.NoClassDefFoundError: org/apache/juli/logging/LogFactory. 

すなわち、 .warファイルのような同じエラーが専用のjettyインスタンスに入りました。 org.apache.toimcat-> tomcat.juliを再度インクルードすることで、mainメソッドを再度起動することはできますが、jettyインスタンス上で実行される.warファイルを構築することはできません。

メインクラスには以下が含まれています二つの方法(および@SpringBootApplicationで注釈されている):

protected SpringApplicationBuilder configure(SpringApplicationBuilder app) { 
    application.sources(App.class); 
    return super.configure(app); 
} 

public static void main(String[] args) throws Exception { 
    SpringApplication.run(App.class, args); 
} 

誰もが正しい方向にこの/時点で私を助けることはできますか?私は.warとスタンドアローンの使い方について同じ設定を使いたいと思う。

のpom.xml: `答えてくれてありがとう、のpom.xmlこのコメントである:

<?xml version="1.0" encoding="UTF-8"?> 
<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>my.company</groupId> 
    <artifactId>testing</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>war</packaging> 
    <properties> 
     <java.version>1.8</java.version> 
     <start-class>my.company.App</start-class> 
    </properties> 

    <parent> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-parent</artifactId> 
     <version>1.3.3.RELEASE</version> 
     <relativePath/> <!-- lookup parent from repository --> 
    </parent> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-maven-plugin</artifactId> 
       <executions> 
        <execution> 
         <goals> 
          <goal>repackage</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 

    <!-- Additional lines to be added here... --> 
    <dependencies> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-web</artifactId> 
      <exclusions> 
       <exclusion> 
        <groupId>org.springframework.boot</groupId> 
        <artifactId>spring-boot-starter-tomcat</artifactId> 
       </exclusion> 
      </exclusions> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-jetty</artifactId> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-jdbc</artifactId> 
      <!-- <exclusions> 
       <exclusion> 
        <groupId>org.apache.tomcat</groupId> 
        <artifactId>tomcat-juli</artifactId> 
       </exclusion> 
      </exclusions>--> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-hateoas</artifactId> 
     </dependency> 
     <!-- com.oracle --> 
     <dependency> 
      <groupId>com.oracle</groupId> 
      <artifactId>ojdbc6</artifactId> 
      <version>11.2.0.3</version> 
     </dependency> 
    </dependencies> 
</project> 
+0

あなたの完全なpomを投稿する場合は、クラスパスにtomcatの依存関係がないことを確認してください(これはtomcat jdbcのものです)。 –

+0

ありがとうございます、pom.xmlは今質問の一部です – user842639

+0

あなたはすでにTomcatの依存関係を除外していますが、あなたのJettyの依存関係には '提供された'の範囲が必要です。どの依存関係が引き込まれているかを知るには、 'mvn dependency:tree'を実行したいと思うかもしれません。私はそれらのうちのひとつが' tomcat-jdbc'を引っ張ると思います。 –

答えて

0

は、一般的に「.warファイル」のためと実行の両方に単一のpom.xml構成を持っている方法はありません適切な依存関係管理の違いを持つ '.jar'私はあなたが '.war'として展開しながら実行可能なものとして開発してテストしたいと思っていますが、

完璧な解決策は、Mavenプロファイルを使用することです。したがって、 '.war'パッケージのデフォルトプロファイルを持つことができ、そのルールは除外されます。また、「JarExecutable」プロファイルを持つことができます。ここでは、そのプロファイルを元に戻し、他のすべての相違をデフォルトから説明します。

他の解決方法も、それほど悪くなく、しばしば役に立ちます。提供されたJetty固有の依存関係をすべて構成します。 Springブートパッケージ化は実行可能なjarファイルにインクルードされますが、それらは省略されます(または、デフォルトではクラスパスに含まれない別のディレクトリにパッケージ化されます)。

関連する問題