前言

以前读书的时候浅浅接触过 Java Web 开发,因为水土不服,所以后来走上了 Android 开发这条路。最近突然兴起,想再次了解了解后端开发,今天迈出第一步,搭建开发环境。

想起彼时,JetBrains 的开发套件在国内似乎还未流行起来,大多数人仍在使用 Eclipse 开发,环境的配置也比较繁琐。现在只需下载 IntelliJ IDEA Ultimate,几乎不需要什么配置,开箱即用。

但是众所周知,IntelliJ IDEA Ultimate 需要付费使用,我作为学习需要,还不值得花这笔钱,而网上各种破解都由于版本的迭代变得愈发不稳定,因此免费的 IntelliJ IDEA Community Edition 才是更加适合我的选择。

由此又产生了另一个问题,IntelliJ IDEA Community Edition 是不包含 Tomcat 的,所以还是需要我们手动配置。

配置

前往 Apache Tomcat 官网 下载,下载完成后解压至 ~/Library/ 目录,终端进入 Tomcat 下的 bin 目录执行命令:

➜   sudo chmod 755 *.sh

该命令用于授权读写和执行权限,接着尝试启动 Tomcat 服务:

➜   sudo sh ./startup.sh

不知道因为什么原因,即使已经配置过环境变量,Tomcat 无法正确读取我的 JDK 路径:

找不到 Java Runtime

这并不是什么大问题,因为我们等会可以直接在 IntelliJ IDEA Community Edition 中启动它,你可以跳过这部分的内容。

不过为了能够在终端直接启动,我们可以手动配置一下。

先看看这个问题是在哪里触发的。上方的命令会先进入 startup.sh 文件,内部会调用 catalina.sh

PRGDIR=`dirname "$PRG"`
EXECUTABLE=catalina.sh

if $os400; then
  eval
else
  if [ ! -x "$PRGDIR"/"$EXECUTABLE" ]; then
    echo "Cannot find $PRGDIR/$EXECUTABLE"
    echo "The file is absent or does not have execute permission"
    echo "This file is needed to run this program"
    exit 1
  fi
fi

exec "$PRGDIR"/"$EXECUTABLE" start "$@"

catalina.sh 内部则会调用 setclasspath.sh

# Get standard Java environment variables
if $os400; then
  . "$CATALINA_HOME"/bin/setclasspath.sh
else
  if [ -r "$CATALINA_HOME"/bin/setclasspath.sh ]; then
    . "$CATALINA_HOME"/bin/setclasspath.sh
  else
    echo "Cannot find $CATALINA_HOME/bin/setclasspath.sh"
    echo "This file is needed to run this program"
    exit 1
  fi
fi

setclasspath.sh 内部找不到 JAVA_HOMEJRE_HOME 就会报错:

# Make sure prerequisite environment variables are set
if [ -z "$JAVA_HOME" ] && [ -z "$JRE_HOME" ]; then
  ...
  if [ -z "$JAVA_HOME" ] && [ -z "$JRE_HOME" ]; then
    echo "Neither the JAVA_HOME nor the JRE_HOME environment variable is defined"
    echo "At least one of these environment variable is needed to run this program"
    exit 1
  fi
fi

那么我就可以在 setclasspath.sh 顶部强行写入路径:

# 写入 Java 路径,以自己的安装路径为准
export JAVA_HOME="/Users/liarr/Applications/Android Studio.app/Contents/jbr/Contents/Home"

保存后再次启动:

Tomcat 启动

没有问题。打开浏览器,访问 http://localhost:8080,能正常访问。

Localhost

关闭 Tomcat 服务:

➜   sudo sh ./shutdown.sh

接下来进入 IntelliJ IDEA Community Edition 进行配置。首先安装「Smart Tomcat」插件:

Smart Tomcat

然后在「Tomcat Server」中添加我们上面安装的 Tomcat 路径:

Tomcat Server

配置完成后就可以创建项目,为了省去手动创建文件的步骤,这里我直接选择「Maven Archetype」,当然如果你熟悉项目结构的话也可以使用 Gradle 等其他构建方式。

创建 Maven 项目

进入后修改运行配置:

编辑运行配置

在这里添加「Smart Tomcat」:

运行配置设置为 Smart Tomcat

然后直接运行,控制台会打印出访问地址:

控制台日志

点击即可在浏览器访问,它所渲染的是 ./src/main/webapp/index.jsp 的内容。

至此,基于 IntelliJ IDEA Community Edition 的 Tomcat 配置就已完成,可以愉快地进行下一步的学习了。

另外,这种方法适用于我们开发和调试阶段,如果需要部署到生产环境,需要打成 WAR 包,这属于后话。