Java 在Tomcat服务器上使用Gradle构建部署Spring应用程序

Java 在Tomcat服务器上使用Gradle构建部署Spring应用程序,java,spring,hibernate,tomcat,gradle,Java,Spring,Hibernate,Tomcat,Gradle,我对斯普林和格拉德尔还不熟悉。我试图在Tomcat服务器上使用Gradle构建来部署Spring应用程序。我能够生成war文件,但我没有用于映射servlet的web.xml文件,也没有映射servlet。我有一个主类和配置类 那么,为了在tomcat上部署我的应用程序,我需要做什么?我找不到一个合适的端到端文章。我经历了这个过程(本文主要讨论maven存储库/插件,而不是Gradle部分),并且只能生成war文件。由于我没有任何web.xml,我不知道如何部署它。谁能帮我一下吗 buil

我对斯普林和格拉德尔还不熟悉。我试图在Tomcat服务器上使用Gradle构建来部署Spring应用程序。我能够生成war文件,但我没有用于映射servlet的web.xml文件,也没有映射servlet。我有一个主类和配置类

那么,为了在tomcat上部署我的应用程序,我需要做什么?我找不到一个合适的端到端文章。我经历了这个过程(本文主要讨论maven存储库/插件,而不是Gradle部分),并且只能生成war文件。由于我没有任何web.xml,我不知道如何部署它。谁能帮我一下吗

   buildscript {
  repositories {
    maven { url "" }
    mavenLocal()
   }
   dependencies {
    classpath("org.springframework.boot:spring-boot-gradle-     plugin:1.0.2.RELEASE")

}
    }

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


 apply plugin: 'war'

war {
baseName = 'abc-service'
version =  '0.1.0'
}


 repositories {
mavenCentral()
maven { url "" }
}

dependencies {
compile("org.springframework:spring-jdbc")
compile("org.springframework:spring-oxm")
compile("org.springframework.boot:spring-boot-starter-web")
compile("org.springframework.boot:spring-boot-starter-data-jpa")
compile("com.fasterxml.jackson.core:jackson-databind")
compile("com.h2database:h2")
compile("mysql:mysql-connector-java:5.1.16")
compile("com.paypal.sdk:rest-api-sdk:1.4.1")

compile("commons-dbcp:commons-dbcp:1.4")
compile("com.sun.mail:javax.mail:1.5.5")
providedRuntime("org.springframework.boot:spring-boot-starter-tomcat");
testCompile("junit:junit")
}

task wrapper(type: Wrapper) {
gradleVersion = '2.1'
 }
以下是我的用户控制器的示例代码:

 @Controller
public class AuthenticationController {
@RequestMapping(value =    "/authentication/userLogin")
 public @ResponseBody
 ResponseEntity<Object> user(@RequestParam(value="username", required=true)      String username,
@RequestParam(value="password", required=true) String password,
HttpServletResponse response) {
 return this.authenticationService.loginUser(username, password);
 } 
 @RequestMapping(value = "/authentication/register")
public @ResponseBody
 Response register(@RequestBody String jsonRequest,
HttpServletResponse response) {
 AuthenticationService authenticationService = new AuthenticationService();
 Response registerResponse =     authenticationService.registerUser(jsonRequest);
 return registerResponse;
 }}
@控制器
公共类身份验证控制器{
@请求映射(value=“/authentication/userLogin”)
公共@ResponseBody
ResponseEntity用户(@RequestParam(value=“username”,required=true)字符串用户名,
@RequestParam(value=“password”,required=true)字符串密码,
HttpServletResponse(响应){
返回此.authenticationService.loginUser(用户名、密码);
} 
@请求映射(value=“/authentication/register”)
公共@ResponseBody
响应寄存器(@RequestBody字符串jsonRequest,
HttpServletResponse(响应){
AuthenticationService AuthenticationService=新建AuthenticationService();
Response registerResponse=authenticationService.registerUser(jsonRequest);
返回寄存器响应;
}}

只要定义了控制器,应用程序就可以按原样运行。Spring boot的一个最好的特性是,它可以为您完成大部分的脏活。您必须使用
@RequestMapping(“/your path”)
将控制器和url路径定义为注释。另外,用
@RestController
注释该类。如果您能给出这个应用程序代码的url,如果它有所有必要的定义,我将能够进一步研究它。此外,我建议做一些修改

将spring引导版本更新至最新的1.3.5

classpath("org.springframework.boot:spring-boot-gradle-plugin:1.3.5.RELEASE")
更新Gradle版本

task wrapper(type: Wrapper) {

    gradleVersion = '2.13'
}
同时更新其他依赖项。然后调用以下命令

gradle wrapper
./gradlew clean build 
第一行将下载并设置您的项目以使用Gradle 2.13版运行,并将其下载到临时目录,而不考虑计算机中安装的Gradle版本。第二行将使用下载的最新Gradle构建您的项目。然后检查您的
/build/libs
目录。您将看到
abc-service-0.1.0-SNAPSHOT.war
文件。只需拿起这场战争并将其部署到Tomcat服务器中

如果要将war文件部署到Tomcat,则应将应用程序构建名称添加到URL以访问映射,因为Tomcat将war文件的文件名用于上下文路径()。例如:
localhost:8080/abc-service-0.1.0-SNAPSHOT/your-mapping/
。您可以使用baseName属性指定war的命名方式。例如,如果不希望在应用程序URL中使用版本号,则可以将其删除

war {
   baseName = 'abc-service'
}
或者,您可以在Gradle构建之后,在复制到Tomcat之前,简单地将war文件重命名为您想要的任何根上下文

我喜欢SpringBoot的另一个特性是,部署SpringBoot应用程序不需要外部Tomcat服务器。它已经有了一个嵌入式Tomcat服务器。为了利用这个特性,您将应用程序构建为一个jar文件,并作为java应用程序运行。要做到这一点,首先,去掉行
apply plugin:“war”
。并将war配置更改为jar配置

jar {
   baseName = 'abc-service'
   version =  '0.1.0'
}
并将其作为jar文件运行

java -jar <project-root-directory>/build/libs/abc-service-0.1.0-SNAPSHOT.jar

检查您的spring boot应用程序类是否正在扩展SpringBootServletilizer。如果您的应用程序类没有扩展SpringBootServletilizer,那么使用catalina.sh运行脚本运行tomcat服务器将不起作用。您需要使用java-jar/usr/local/tomcat/webapps/app_name.war

嗨,谢谢你的回复。嗨,谢谢你的及时回复。我的控制器类中确实有“@RequestMapping”和“@Controller”。现在,我正在使用您提到的jar文件。但是我想要一些东西(比如WAR),这样我就可以进入TomcatWeb容器来托管我的应用程序。我的问题是:•我们真的需要web.xml文件吗?如果是这样,是否有web.xml文件的示例可以托管jar文件吗?如果是,怎么做?由于我已经生成了一个war文件,所以我正在寻找与java EE应用程序包含的类似的web.xml文件。如果没有web.xml文件,我只是尝试将war文件放入Tomcat容器中,但它抛出了一个异常:“404连接被拒绝”谢谢。您是否在基本URL之后添加了应用程序名称。比如,
localhost:8080/abc-service/your-mapping/
。另外,不要忘记尾随的“/”。我现在没有Gradle项目,我测试了一个没有web.xml的Maven项目。它很好用。如果您以jar运行,则不需要应用程序名称,只需执行
localhost:8080/您的映射即可
@RequestMapping(value = "/authentication/register", method = RequestMethod.POST)
public @ResponseBody Response register(@RequestBody String jsonRequest,
   HttpServletResponse response) {
  AuthenticationService authenticationService = new AuthenticationService();
  Response registerResponse =   authenticationService.registerUser(jsonRequest);
  return registerResponse;
}}