我想創建一個從春季啓動應用程序,我可以部署到一個獨立的Tomcat容器戰爭文件,而不是使用嵌入式之一。春季啓動war文件可與嵌入,但不是獨立的Tomcat
我可以創建war文件並使用"java -jar pdfjs-annotator.war"
自己運行它,它工作正常。
我建立gradle bootRepackage
的應用程序(使用搖籃,Tomcat7,爪哇1.7)。
但是,當我將war文件部署到獨立的Tomcat並啓動它時,該應用程序似乎根據日誌無誤啓動,但我無法訪問任何資源,也無法控制器網址工作。
例如,我的index.html是src/main/resources/static/index.html下的一個靜態html頁面,我通常可以通過localhost:8080/index.html調用該頁面,但是當部署到獨立的Tomcat ,頁面不獲取傳遞(它,然後在WEB-INF /班/靜態/ index.html的戰爭文件)通過同一網址。而且任何類型的控制器映射似乎都不起作用。我得到一個404錯誤,而不是。
的build.gradle:
buildscript {
ext {
springBootVersion = '1.2.3.RELEASE'
}
repositories {
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
classpath("io.spring.gradle:dependency-management-plugin:0.5.0.RELEASE")
}
}
apply plugin: 'java'
apply plugin: 'eclipse-wtp'
apply plugin: 'idea'
apply plugin: 'spring-boot'
apply plugin: 'io.spring.dependency-management'
apply plugin: 'war'
war {
baseName = 'pdfjs-annotator'
version = '1.0.0-SNAPSHOT'
}
allprojects {
apply plugin: 'java'
sourceCompatibility = 1.6
targetCompatibility = 1.6
}
repositories {
mavenCentral()
}
configurations {
providedRuntime
}
dependencies {
compile("org.springframework.boot:spring-boot-starter-data-jpa")
compile("org.springframework.boot:spring-boot-starter-data-rest")
compile("org.springframework.boot:spring-boot-starter-web")
runtime("mysql:mysql-connector-java")
providedRuntime("org.springframework.boot:spring-boot-starter-tomcat")
testCompile("org.springframework.boot:spring-boot-starter-test")
compile ('org.hibernate.javax.persistence:hibernate-jpa-2.0-api:1.0.1.Final')
}
eclipse {
classpath {
containers.remove('org.eclipse.jdt.launching.JRE_CONTAINER')
containers 'org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7'
}
}
task wrapper(type: Wrapper) {
gradleVersion = '2.3'
}
我的主要應用類:
@EnableJpaRepositories
@SpringBootApplication
public class PdfAnnotator extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(PdfAnnotator.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(PdfAnnotator.class);
}
}
當我看着分解的戰爭,我確實看到以下META-INF /清單.MF:
Manifest-Version: 1.0
Start-Class: com.mypackage.pdfcomment.PdfAnnotator
Spring-Boot-Version: 1.2.3.RELEASE
Main-Class: org.springframework.boot.loader.WarLauncher
通常產生兩級戰的文物,一個命名的.war,一個名爲.war.original的gradle這個生成過程 - 將.war是持有正確的MANIFEST.MF條目中的一個,它是我用來部署到獨立的Tomcat的一個。
什麼是缺失?我已經檢查其他問題在這裏SO:
,也是春季啓動文檔,但找不到的什麼是錯的提示。
* ===更新=== *
我安裝了一個全新的Tomcat7,部署war文件那裏,一切都工作正常。似乎與我運行的Tomcat實例/配置有關。不知道究竟是什麼問題,但我不打算進一步檢查它,因爲現在使用新的Tomcat工作正常。
Spring Boot gradle插件通常會創建兩個工件,一個用於Tomcat,另一個不用。我忘了命名,但只是嘗試兩個。除此之外,我會使用戰爭文件。我知道這不再是必要的,但要安全。 –
@ mh-dev對,我想你的意思是.war和.war.original - 我會試試看。到目前爲止,我剛剛使用了.war。 –
@ mh-dev我嘗試了兩種,但沒有區別。無論如何,我使用的.war應該是正確的,因爲這是唯一擁有正確MANIFEST.MF條目的。 –