慧捣鼓IT
首发于慧捣鼓IT
如何给树莓派搭建WEB开发运行环境之JAVA篇

如何给树莓派搭建WEB开发运行环境之JAVA篇

在上一篇,我们已经脱掉了她华丽的外衣,你不用再添加任何华而不实的装饰,一切都交给CLI来搞定。树莓派WEB开发运行环境之JAVA篇,只需5个步骤:

  • 安装JAVA开发包
  • 安装和运行maven
  • 创建JAVA WEB工程
  • 使用Struts 2框架
  • 做你自己的VIM

安装JAVA开发包

树莓派基于arm架构,因此需要安装JDK for ARM,不过你不用担心,聪明的树莓派已经为你预装好了。

通过ssh连接树莓派,在终端执行以下命令就可以打印出你的java版本:

$ java -version

Java版本信息

如果你的树莓派着实没有的话,可选择以下两种方式安装。

① 使用树莓派提供的JDK

你可以使用 apt 包管理器来安装:

$ sudo apt-get update

$ sudo apt-get upgrade

$ sudo apt install oracle-java8-jdk

在国内使用 apt 访问树莓派官方的源要等灯、等灯、等灯……

我尝试修改为国内的镜像速度要快很多,但对于这个JDK for ARM,好像非得去官方的源,好在你可以趁这个时间上个厕所、扭扭屁股。

如果着实很慢的话,可以考虑从Oracle官网下载。

② 使用Oracle官网的JDK

如果你因为各种理由需要使用Oracle官方的JDK,可以参考下面的步骤:

下载官方安装包

打开Oracle官网(oracle.com),鼠标依次通过 Menu -> Products -> Java,点击Download Java(JDK) for Developers,打开Java SE Download页面,点击左侧菜单中的Java Embedded,在New Downloads中找到“JDK 8u201 for ARM”并点击进入。

Oracle官网JDK下载界面

点击 Accept License Argeement,下载第一个 Linux ARM 32 Hard Float ABI,虽然树莓派的处理器是64 bit,但她的Raspbian操作系统是32 bit的,所以你要下载32位的版本。

你需要把这个文件下载到树莓派上而不是你使用的电脑上。可以先在自己的电脑上下载,然后查看下载的地址并复制这个地址,在树莓派的终端里执行以下命令就可以把文件下载到树莓派上:

$ wget 你复制的下载地址

如果你没有 wget 的话,你应该知道怎么用 apt 来安装。

一定要复制下载时的地址,而不是Oracle官网上那个静态的超链接地址,不然你会得到一个很小的不能用的文件。

解压缩JAVA安装包

下载完毕后,你会得到一个名字为 jdk-8u201-linux-arm32-vfp-hflt.tar.gz的文件,而且可能屁股后面还跟着一大串\?AuthParam\=xxxxxxx,如果有的话使用 mv 命令把它修改掉就可以了:

$ mv jdk-8u201-linux-arm32-vfp-hflt.tar.gz\?AuthParam\=xxxxxxx jdk-8u201-linux-arm32-vfp-hflt.tar.gz

<!--
当然你不用一个字一个字的输入那么长的文件名,只要输入jdk,然后按 Tab 键,linux终端会匹配你已经输入的jdk三个字符,然后自动将后面的一大串补全。
对于其他所有的Linux命令和文件名,都可以用 Tab 来补全,当你按一下 Tab 键没有补全的情况下,你可以尝试按两次,看看会发生什么。
-->

然后使用以下命令解压缩:

$ tar zxvf jdk-8u201-linux-arm32-vfp-hflt.tar.gz

你会得到一个名为 jdk1.8.0_201 的目录,java命令就在这个目录下的 bin 目录下。

测试和配置JAVA运行环境

在终端执行以下命令:

$ jdk1.8.0_201/bin/java -version

终端将打印出如下内容:

新安装的Java版本信息

这时你可能发现,如果直接在终端执行 java -version 命令,系统会提示找不到命令,或者打印出的还是你旧的的 java 版本信息,这是因为你还没有告诉终端,你新的 java 命令在哪里。

你可以把这个 jdk1.8.0_201 目录放到 /opt下面:

$ sudo mv jdk1.8.0_201 /opt

然后为新的 java 命令创建软连接:

$ sudo ln -s /opt/jdk1.8.0_201/bin/java /usr/local/bin/java

还有 javac 命令,也是你需要的

$ sudo ln -s /opt/jdk1.8.0_201/bin/javac /usr/local/bin/javac

如果你的系统中原本已经存在其他版本的java,建议你把它删除,或者把 /usr/bin中现有的java软连接修改为其他名字,否则会发生冲突。

<!--
使用apt删除软件包的命令为:
$ sudo apt purge 要删除的软件包名
-->

这时你在终端里直接输入 java -version 命令,终端就会打印出最新的java版本信息。

至此,你的官方版的JAVA开发包就安装完成了。

安装和运行maven

Maven是apache下的一个开源项目,用于java工程管理,如果你之前没有用过它,那我给你介绍再多都是白搭,不如我们先来做一遍,然后你一定会明白maven是个什么鬼。

maven基于java运行环境,它的安装非常简单。

① 下载Maven安装包

打开apache官网(apache.org),拉到页面最底部,在APACHE PROJECT LIST中的 M 中找到Maven。

Apache官网底部项目清单

进入Maven的官网,你很容易找到 Download连接,点击进入,我们选择Files中的第一个 Binary tar.gz archive 来下载:

Maven下载链接清单

右击下载链接,把地址拷贝下来,然后到树莓派终端里使用 wget 命令:

$ wget 你拷贝的下载地址

下载完成后你将得到一个名为 apache-maven-3.6.0-bin.tar.gz 的文件。

② 解压缩Maven安装包

用 tar 命令解压缩:

$ tar zxvf apache-maven-3.6.0-bin.tar.gz

你将得到一个名为 apache-maven-3.6.0 的新目录。

③ 测试和配置Maven环境

把解压缩得到的新目录移动到 /opt 目录下:

$ sudo mv apache-maven-3.6.0 /opt

Maven主要使用mvn命令,所以要为它建立软链接,这样就可以在终端直接输入mvn(而不用加路径)来使用这个命令:

$ sudo ln -s /opt/apache-maven-3.6.0/bin/mvn /usr/local/bin/mvn

在终端直接执行 mvn -version 命令,终端会打印出如下内容:

Maven版本及运行环境

你一定看明白了,第一行是 Maven 的版本信息,第二行是 Maven 所在的目录,第三行是你的 Java 版本信息,第四行是语言和编码,最后一行是操作系统的信息。

至此,你的 Maven 就安装完成了,接下来可以用它来创建你的 JAVA WEB 工程。

创建JAVA WEB工程

① 使用Maven创建webapp工程

在终端里定位到你希望创建JAVA WEB工程的目录,然后执行以下命令:

$ mvn archetype:generate \

-DarchetypeGroupId=org.apache.maven.archetypes \

-DarchetypeArtifactId=maven-archetype-webapp \

-DgroupId=cn.newssit \

-DartifactId=huidaogu

其中 archetype:generate 是从原型创建工程,所谓原型就是工程模板,方便我们创建不同的工程,你也可以定义一个自己的原型。

DarchetypeGroupId定义了原型的所属组织

DarchetypeArtifactId定义了原型工件的ID,我们这里使用webapp原型。

DgroupId为你自己的组织ID

DartifactId就是你想要创建的工程名字,比如我的是huidaogu

DgroupId和DartifactId也将组合成为你的java包路径

命令执行完毕后,你将看到Maven为你创建了一个标准的webapp工程目录,主目录名就是你的DartifactId,其下面有一个pom.xml文件,用于配置和管理你的工程,还有src、target两个目录,顾名思义,src里面是你的源码,target里面是编译后的文件。

② 修改pom.xml文件

使用Maven管理Java工程,你不需要下载任何所依赖的jar包,只需要在pom.xml文件里进行相应设置,Maven会自动帮你下载,能够避免因为缺包和包的版本带来的各种奇葩错误。

我们首先给它加上一个jetty插件,这个插件可以让你把用Java开发的WEB工程运行起来,没错,和你所熟悉的Tomcat是一样的功能。

使用 vim 打开pom.xml文件,找到<plugins>标签,在它下面增加一个<plugin>,内容如下:

<plugin>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-maven-plugin</artifactId>
    <version>9.4.15.v20190215</version>
    <configuration>
        <webApp>
            <contextPath>/${project.build.finalName}</contextPath>
        </webApp>
        <stopKey>CTRL+C</stopKey>
        <stopPort>8999</stopPort>
       <reload>manual</reload>
        <scanIntervalSeconds>2</scanIntervalSeconds>
    </configuration>
</plugin>

如果你编辑好了,在终端里它应该是酱紫的:

pom.xml配置插件

它的意思是Maven要添加一个eclipse组织的jetty-maven-plugin插件,版本号是9.4.15,把这个服务插件配置为Ctrl+C停止,手动重启,也就是按回车键重启。

当然,你也可以使用tomcat插件,不要问我为什么用这个而不用那个,我不会跟你探讨这种无聊至极的问题,没有原因,我是实践派,只要满足用即可。

③ 创建index.jsp文件

Maven将jsp文件放在src/main/webapp下面,而且会自动帮你创建一个index.jsp文件,你只需要找到它并且编辑它就可以了。

我们只是测试一下Maven所管理的工程是否能用,所以你怎么编辑index.jsp的内容都没关系,只要符合jsp文件的规范,能让它运行即可。我是这样写的:

<!DOCTYPE html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<html>
  <head>
    <meta charset="UTF-8">
    <title>Huidaogu</title>
  </head>
  <body>
    <h2>Hello JSP!</h2>
  </body>
</html>

④ 执行mvn命令

然后激动人心的时刻就要来临了,确定你现在处于Maven创建的工程根目录下,也就是pom.xml文件所在的目录,比如我的要在huidaogu目录下,然后执行下面的命令:

$ mvn jetty:run

然后Maven会按照pom.xml文件的要求去下载所需要的各种包和插件,第一次执行这个命令可能需要花点时间,你会看到屏幕上不断跳出来Downloading的提示,也许你又需要去上个厕所或扭一会儿屁股。

等Maven执行完毕,它会有大致如下的提示:

jetty启动信息

意思就是Jetty Server已经启动,并允许在终端里通过按回车键重新启动。

⑤ 测试web页面

打开浏览器,输入如下地址:

http://树莓派的IP地址:8080/你的工程名字

如果一切正常的话,你将会看到index.jsp的内容:

Hello JSP页面

测试完成后,你可以使用Ctrl+c组合键退出jetty服务,或者你也可以暂时不退出,再打开一个新终端的并连接到树莓派,以进行下面的操作。

使用Struts 2框架

也许你已经学习了Java开发里大名鼎鼎的SSH框架,那么你可以继续使用它们来构建你的工程。下面我们写一个简单的Struts2程序,来验证一下它是完全可以正常工作的。

① 添加Struts2的Jar包依赖

用vim修改pom.xml文件,在<dependencies>下面增加一个<dependency>标签:

<dependency>
    <groupId>org.apache.struts</groupId>
    <artifactId>struts2-core</artifactId>
    <version>2.5.20</version>
</dependency>

Struts2当前最新版本为2.5.20,你也可以改为你所需要的版本。

看到了么,添加一个依赖只需要像这样就可以了,Maven会自动根据你的pom.xml下载所需要的文件。

② 添加Struts2 Servlet过滤器

在你的src/main/webapp下面还有一个WEB-INF目录,里面有一个web.xml文件,你需要在这个文件里设置Strtus2的Servlet过滤器。

用vim把你的web.xml文件修改为如下内容:

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4"
  xmlns="http://java.sun.com/xml/ns/j2ee" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  
  <display-name>你的工程名字</display-name>
  <welcome-file-list>
    <welcome-file>index</welcome-file>
  </welcome-file-list>
  
  <filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
  </filter>
  
  <filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
</web-app>

③ 创建struts.xml文件

在src/main/目录下新建一个resources目录,然后在这个目录下使用vim创建一个struts.xml文件,文件的内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
    "http://struts.apache.org/dtds/struts-2.5.dtd">
​
<struts>
    <constant name="struts.devMode" value="true" />
    
    <package name="你的工程名字" extends="struts-default">
        <action name="index">
            <result>/index.jsp</result>
        </action>
    </package>
</struts>

④ 编译整个工程

如果你刚才使用Ctrl+c组合键停止了你的jetty服务器,那么你可以再次使用 mvn jetty:run 命令来启动它,以编译和更新你刚刚所做的全部修改。

如果你刚才没有停下jetty服务,而是在新打开的终端进行的上述操作,那么你现在可以先编译整个工程:

$ mvn compile

编译完成后,回到之前运行jetty的终端里,按回车键重启jetty服务,也可以使你刚刚所做的全部修改生效。

⑤ 测试运行

最后在浏览器里输入如下地址来测试你的Struts2:

http://树莓派的IP地址:8080/你的工程名字/index.action

你依然会看到和上次一样的页面,不过内涵已经不同了,你输入的地址(index.action)会提交给Struts2处理,由Strtus2通过struts.xml文件找到index.jsp,然后再将这个页面返回给浏览器。

如果你想深入学习Maven和Struts2以及其他Java框架的话,建议你直接到他们的官方网站,那里有全世界最新、最详实的文档,能够满足你所有的好奇心。

慧捣鼓工作室的首要理念是独立思考,作为独立思考的首要条件,就是你要看原版的官方文档,基于此来做出你自己的思考。

做你自己的VIM

你一定发现了,在CLI下面做开发,离不开VIM或者emacs之类的编辑器,在脱掉树莓派的外衣之后,你可以为vim增加点装饰,让你的开发更有乐趣一点,比如下面这样看上去是不是更性感一点:

我的VIM开发环境

使用vim丰富的插件,只需要简单的几个操作就可以搞定。

① 安装Vundle插件管理器

在树莓派终端执行以下命令从github获取Vundle插件:

$ git clone github.com/VundleVim/Vu ~/.vim/bundle/Vundle.vim

② 创建vim配置文件

在你的用户主目录下创建.vimrc文件:

$ vim ~/.vimrc

输入以下内容:

"Vundel插件管理器
set nocompatible
filetype off
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
"以下是要安装的插件
Plugin 'VundleVim/Vundle.vim'
Plugin 'scrooloose/nerdtree'
Plugin 'jistr/vim-nerdtree-tabs'
Plugin 'artur-shaik/vim-javacomplete2'
call vundle#end()
filetype plugin indent on
​
""""""""""""""""""""""""""""""""""""""""""""""""
" 显示相关
""""""""""""""""""""""""""""""""""""""""""""""""
"配色方案
set t_Co=256
set background=dark
"显示行号
set nu
"突出显示当前行
set cursorline
hi CursorLine cterm=NONE ctermbg=black
"自动缩近
set autoindent
set cindent
"Tab键的宽度
set tabstop=4
"统一缩近为4
set softtabstop=4
set shiftwidth=4
"不用空格代替制表符
set noexpandtab
"在段和行开始处使用制表符
set smarttab
syntax enable
"允许代码折叠
set foldmethod=indent
set foldlevel=99
"空格键折叠
nnoremap <space> za
​
""""""""""""""""""""""""""""""""""""""""""""""""
"插件设置
""""""""""""""""""""""""""""""""""""""""""""""""
"Java代码补全
autocmd FileType java setlocal omnifunc=javacomplete#Complete
"NERDTree树形文件导航插件
nnoremap <silent><F10> :NERDTree<CR>
​
""""""""""""""""""""""""""""""""""""""""""""""""
"其他设置
""""""""""""""""""""""""""""""""""""""""""""""""
filetype plugin indent on
set completeopt=longest,menu
"编码
set enc=utf-8
set fencs=utf-8,gb18030,gbk,gb2312,cp936,usc-bom,shift-jis
set termencoding=utf-8
set encoding=utf-8
set fileencodings=utf-8,ucs-bom,cp936
set fileencoding=utf-8
语言设置
set langmenu=zh_CN.UTF-8:

你可以直接拷贝粘贴到vim中,然后保存并关闭vim。

③ 安装插件

在安装插件之前,我们要先用apt安装vim-nox软件包,树莓派默认安装的vim是不提供python支持的,而有些插件需要这个支持,所以可以通过安装vim-nox包来提供python支持,或者重新编译安装vim,编译安装操作之前咱们说过,等把眼前的东西玩腻了再去搞。

$ sudo apt install vim-nox

安装完成之后再启动vim就是vim-nox版本。

刚才我们在vim的配置文件里定义了几个要安装的插件,分别是Vundle插件管理器、nerdtree树形结构和Java代码补全插件,现在你可以重新用vim打开刚才新建的配置文件,然后在普通模式下执行 :PluginInstall 命令,vim会自动下载和安装这些插件:

VIM安装插件

下载需要一些时间,特别是Java代码补全插件,待安装完毕后,屏幕左下角会提示 Done!

然后你就可以通过 :q 命令退出vim了。如果中间安装失败,可以按 l 键查看日志,或者重新安装。

④ VIM开发环境初体验

现在你可以用vim写一个java类,体验一下CLI下的欢乐开发之旅。

首先创建包路径,也就是你用Maven创建工程时定义的,比如我的是cn.newssit.huidaogu。

$ mkdir src/main/java/

$ mkdir src/main/java/cn

$ mkdir src/main/java/cn/newssit

$ mkdir src/main/java/cn/newssit/huidaogu

$ mkdir src/main/java/cn/newssit/huidaogu/model

$ vim src/main/java/cn/newssit/huidaogu/model/User.java

然后输入你的代码,我的测试代码如下:

package cn.newssit.huidaogu.model;
​
public class User {
    private int id;
    private String userName;
  
    public int getId() {
        return id;
    }
​
    public void setId(int id) {
        this.id = id;
    }
​
    public String getUserName() {
        return userName;
    }
​
    public void setUserName(String userName) {
        this.userName = userName;
    }
}

在这个过程中,你可以体验vim配色方案,当前行的高亮显示。你可以按F10来打开侧边的树形目录,使用 j k 选择目录或文件,按回车键打开。你还可以通过Ctrl+x Ctrl+o组合键来体验Java自动补全功能:

树莓派上用VIM打造的JAVA开发环境

以上只是vim的一些基本设置,如果需要详细了解,vim官网(vim.org)提供了各种丰富的文档和推荐书籍。此外网上有许多好用的插件、配置方案,还有配色方案比如solarized等,可以去github等网站查找。

当然,以上方法不只适用于树莓派,其他Linux发行版和MacOS也可以参照执行。


关联文章推荐:

如何给树莓派安装操作系统zhuanlan.zhihu.com图标树莓派初次启动后的设置zhuanlan.zhihu.com图标树莓派入门必会的20个Linux命令zhuanlan.zhihu.com图标如何给树莓派搭建WEB开发运行环境之LAMP篇zhuanlan.zhihu.com图标

编辑于 2019-04-03

文章被以下专栏收录