对于一个大项目来说,不应该使用IDE来进行项目管理,大多会选择Gradle或Maven。在公司使用Gradle也有一段时间了,但一直没有从头写过,所以这次决定手动来搭建一个J2EE Gradle项目。
新建项目
直接在Intellij下New一个Project就行了,选择Gradle项目
添加J2EE支持
虽然Intellij可以通过‘Add Framwork Support’来初始化webapp目录,但至少我使用的14.1.1版本默认和maven的推荐目录结构不同,所以这里就手动创建目录了。[Introduction to the Standard Directory Layout]
DIR | FUNCTION |
---|---|
src/main/java | Application/Library sources |
src/main/resources | Application/Library resources |
src/main/webapp | Web application sources |
build.gradle
先贴上我的配置
apply plugin: 'java'
apply plugin: 'war'
version = '1.0'
sourceSets {
main {
java {
srcDirs 'src/main/java'
}
resources {
srcDirs 'src/main/resources'
}
}
}
war {
webXml file('src/main/webapp/WEB-INF/web.xml')
webInf {
from 'src/main/webapp/WEB-INF'
}
from fileTree('src/main/webapp/')
}
repositories {
mavenCentral()
}
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.11'
compile 'tomcat:servlet:4.1.36'
compile 'org.slf4j:slf4j-api:1.7.12'
compile 'org.apache.logging.log4j:log4j-slf4j-impl:2.2'
compile 'org.apache.logging.log4j:log4j-core:2.2'
}
有一点要注意,我是把jsp文件放在src/main/webapp/目录下的,所以使用 from fileTree(‘src/main/webapp/’) 把该目录下所有的文件放到war包的根目录。之前使用classpath这个参数一直搞不好,被坑了好久 -_-||
还有一个小技巧,如果写的时候忘了war有那个参数怎么办?其实很简单,直接用IDE自带的代码检查功能去看War这个类的源代码就可以了
class War extends Jar {
public static final String WAR_EXTENSION = 'war'
private File webXml
private FileCollection classpath
private final DefaultCopySpec webInf
//...
}
怎么样,是不是很清楚,省得去网上到处找了。同样,我打包jsp文件的from函数也是可以找到的,只不过在War的父父父…类里面,我就不看了。
配置Run Configuration
貌似gradle有tomcat的插件,但既然已经有Intellij的支持了,为了方便,我就直接用Intellij来部署应用。
和普通WebApp项目相同,只需简单几部配置好tomcat就行了。只是有一点需要注意,在Deployment标签中,由于我们使用的是Gradle来就行编译,所以应该选择Gradle:ProjectName:fileName.war(exploded)。这样IDE就会先运行Gradle就行编译,再部署程序了。
最后,点击右上角的Run按钮应该就可以让WebApp跑起来了^_^。