2015-11-07 3 views
9

私はGradleを使用して非常に単純なスプリングブートアプリケーション(99%の静的コンテンツ)をTomcatが埋め込まれたjarファイルにビルドしてパッケージ化しています。Gradle:Springブート依存関係でfat fatを作成

私はこの瓶を作成しようとしましたが、最初は結果が86kで、起動しませんでした。なぜなら、いくつかのSpringブートクラスがないからです。私はこの瓶に、アプリケーションの依存関係が全く含まれていないと結論付けました。完全に自己完結型の瓶が欲しいので、もっと研究しなければなりません。

これは、「jar」セクションにfrom {configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }セクションを追加してすべての依存関係を取り込むアドバイスを発見したときです。 (私は願います)。私は三項演算子の考え方に精通しており、ここで何をしようとしているのか分かります。

残念ながら、まだ動作していません!ここで私が打ち上げに間違いがあります。以下は私のbuild.gradleです。

私は、完全にjarに含まれている埋め込みのtomcatで春のブートアプリケーションが欲しいです。非常に独創的なことをしていますか?
この時点でのご協力をいただければ幸いです。私が使用しています

(About 80 lines of successful Spring Boot launch messages followed immediately by: 
18:16:54.890 [main] WARN o.s.b.c.e.AnnotationConfigEmbeddedWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt 
org.springframework.context.ApplicationContextException: Unable to start embedded container; nested exception is org.springframework.context.ApplicationContextException: Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean. 
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:132) [SpringWsTest1.jar:na] 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:474) ~[SpringWsTest1.jar:na] 
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:117) [SpringWsTest1.jar:na] 
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:689) [SpringWsTest1.jar:na] 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:321) [SpringWsTest1.jar:na] 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:969) [SpringWsTest1.jar:na] 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:958) [SpringWsTest1.jar:na] 
    at ws.Application.main(Application.java:11) [SpringWsTest1.jar:na] 
Caused by: org.springframework.context.ApplicationContextException: Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean. 
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.getEmbeddedServletContainerFactory(EmbeddedWebApplicationContext.java:182) [SpringWsTest1.jar:na] 
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.createEmbeddedServletContainer(EmbeddedWebApplicationContext.java:155) [SpringWsTest1.jar:na] 
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:129) [SpringWsTest1.jar:na] 
    ... 7 common frames omitted 
18:16:54.891 [main] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Destroying singletons in org.s[email protected]3b084709: defining beans [org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,application,org.springframework.context.annotation.ConfigurationClassPostProcessor.importAwareProcessor,org.springframework.context.annotation.ConfigurationClassPostProcessor.enhancedConfigurationProcessor,demoController,greetingController,org.springframework.boot.autoconfigure.AutoConfigurationPackages]; root of factory hierarchy 
18:16:54.891 [main] ERROR o.s.boot.SpringApplication - Application startup failed 
org.springframework.context.ApplicationContextException: Unable to start embedded container; nested exception is org.springframework.context.ApplicationContextException: Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean. 
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:132) ~[SpringWsTest1.jar:na] 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:474) ~[SpringWsTest1.jar:na] 
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:117) ~[SpringWsTest1.jar:na] 
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:689) [SpringWsTest1.jar:na] 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:321) [SpringWsTest1.jar:na] 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:969) [SpringWsTest1.jar:na] 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:958) [SpringWsTest1.jar:na] 
    at ws.Application.main(Application.java:11) [SpringWsTest1.jar:na] 
Caused by: org.springframework.context.ApplicationContextException: Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean. 
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.getEmbeddedServletContainerFactory(EmbeddedWebApplicationContext.java:182) ~[SpringWsTest1.jar:na] 
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.createEmbeddedServletContainer(EmbeddedWebApplicationContext.java:155) ~[SpringWsTest1.jar:na] 
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:129) ~[SpringWsTest1.jar:na] 
    ... 7 common frames omitted 
Exception in thread "main" org.springframework.context.ApplicationContextException: Unable to start embedded container; nested exception is org.springframework.context.ApplicationContextException: Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean. 
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:132) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:474) 
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:117) 
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:689) 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:321) 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:969) 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:958) 
    at ws.Application.main(Application.java:11) 
Caused by: org.springframework.context.ApplicationContextException: Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean. 
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.getEmbeddedServletContainerFactory(EmbeddedWebApplicationContext.java:182) 
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.createEmbeddedServletContainer(EmbeddedWebApplicationContext.java:155) 
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:129) 
    ... 7 more 

build.gradle:あなたはGradleのを使用しているためあなたは、春・ブートアプリケーションの脂肪ジャーアーティファクトを構築するために自分の追加のGradleの設定を行う必要はありません

println System.getProperty("java.home") 

buildscript { 
    repositories { 
     mavenCentral() 
    } 
    dependencies { 
     classpath("org.springframework.boot:spring-boot-gradle-plugin:1.2.7.RELEASE") 
    } 
} 

apply plugin: 'java' 
apply plugin: 'eclipse' 
apply plugin: 'idea' 
apply plugin: 'spring-boot' 


jar { 
    manifest { 
     attributes 'Main-Class': 'ws.Application' 
    } 

    from { 
     configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } 
    } 
} 


repositories { 
    mavenCentral() 
} 


dependencies { 
    compile("org.springframework.boot:spring-boot-starter-web") 
    testCompile("junit:junit") 
} 

task wrapper(type: Wrapper) { 
    gradleVersion = '2.3' 
} 

sourceCompatibility = 1.8 
targetCompatibility = 1.8 

答えて

16

スプリングブートプラグイン。それはあなたのためにそれを行うにはすでにbootRepackageというタスクがあります。あなたは公式ユーザーガイドherehereでそれについて読むことができます。

依存関係のコンテンツを解凍するために行った操作をすべて削除し、このタスクを使用してアプリケーションとともに単一のjarファイルを取得してください。

ちなみに、より良いアーカイブサイズを提供できる他のソリューションを検討することに興味があるかもしれません。そのうちの1つ、Capsule in this articleについて読むことができます。

+0

ドキュメントにbootRepackageタスクが見つかりましたが、ドキュメントを完全には説明できなかったので、まだ使用しようとしていませんでした。さて、私は間違っていました。なぜなら、それはドキュメントに示されているのと同じくらい簡単で、私が望むことができるだけで動作するからです。 Capsuleのリーダーのおかげで、私はそれを試してみる必要があります。 – user1445967

+0

@Stanislavちょうど、後者のリンクはもう存在しません。 –

+0

..そしてSpring Boot 2.0以来、gradleタスクはbootjar(それに応じてbootwar)と呼ばれています。https://spring.io/blog/2017/04/05/spring-boot-s-new-gradle-plugin –

関連する問題