曾经在NetBeans,Eclipse的时代,web项目搭配Tomcat启动是较为轻松的,myeclipse甚至是内置了一个tomcat服务器,连自己去下载tomcat这一步都不需要。但Java的IDE进入Intellij IDEA流行时,就出现了一些小问题...
不得不承认近些年Intellij IDEA的迭代速度是有些快的,一年就能有几次大更新,最开始很多人应该都是用Ultimate
版本的,但即使可以像myeclipse一样能破解,但每次发布新版时还是会有些困扰,比以前是麻烦了许多,很多人不得不转使用Community
版,问题就在于这个版本是没有Tomcat支持的,大多数情况下只能去安装Smart Tomcat
插件,当然了,还有个Tomcat runner
的插件。这些IDE插件固然是可以的,但只有一套方案显然单薄了些,而且国内安装IDEA插件也很容易安装失败,这里介绍一种新的方式,既引入一个Gradle插件来启动Tomcat,也是不需要自己另外再安装Tomcat本体的,只安装插件即可。
这里默认介绍的是groovy
语言的gradle,也是gradle长期以来的默认语言,不过如果是kotlin
也差不太多,依葫芦画瓢即可,首先在build.gradle
中开始部分引入插件本体:
plugins {
id 'com.bmuschko.tomcat'
}
当然这样apply plugin
也可以:
apply plugin: "com.bmuschko.tomcat"
然后引入tomcat本体到dependencies
中,毕竟是要随项目一起启动的:
dependencies {
def tomcatVersion = '8.5.16'
tomcat "org.apache.tomcat.embed:tomcat-embed-core:${tomcatVersion}",
"org.apache.tomcat.embed:tomcat-embed-logging-juli:8.5.2",
"org.apache.tomcat.embed:tomcat-embed-jasper:${tomcatVersion}",
"org.apache.tomcat.embed:tomcat-embed-websocket:${tomcatVersion}"
}
如果要使用9版本的话,tomcatVersion
为9.0.75
,tomcat-embed-logging-juli
为9.0.0.M6
。
在末尾还需要对tomcat进行一些设定:
tomcat {
httpProtocol = 'org.apache.coyote.http11.Http11Nio2Protocol'
ajpProtocol = 'org.apache.coyote.ajp.AjpNio2Protocol'
}
这两个属性可以说是必需,当然可以设置的部分很多,以下常用属性一看便知:
tomcat {
httpPort = 8090
httpsPort = 8091
enableSSL = true
contextPath = 'url-path'
}
当然还有很多,详细可以看它的github文档介绍:https://github.com/bmuschko/gradle-tomcat-plugin#extension-properties
最后还有一点,需要在settings.gradle
中写一段buildscript
:
buildscript {
repositories {
gradlePluginPortal()
}
dependencies {
classpath 'com.bmuschko:gradle-tomcat-plugin:2.7.0'
}
}
然后刷新IDEA的Gradle面板就能看见Tasks里有一个web application
了:
执行tomcatRun
即可运行,这种方式总体看上去也是比较便捷的,不过说便捷当然还是比不了spring-boot
,但也有很多人喜欢这样传统的方式。国内也有很多文章介绍这个com.bmuschko.tomcat
,连b站专栏都有了,不过感觉都是多多少少有些遗漏,根据我实践来看最后buildscript
的这一段是不能跳过的。
本文写作于2023年5月17日并发布于lyrieek的掘金,于2023年7月16日进行修订发布于lyrieek的阿里云开发者社区。