SublimeText JAVA编译环境配置(三):包配置,JAVA EE开发,知识总结

给不想用或者用不了IDE的同学们.
第一篇 Java SublimeText 编译环境配置及基础程序
第二篇 Java 命令行及SublimeText编译环境配置(二):涉及包的编译选项

1.配置JAVA环境

  1. 从oracle官网下载JDK安装记住安装目录.
  2. 添加环境变量JAVA_HOME,值为java的安装路径,如C:\Program Files\Java\jdk1.8.0_171\
  3. 在环境变量PATH中添加 %JAVA_HOME%\bin
  4. 添加环境变量CLASSPATH,值为.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar

2.java编译运行简介

(1)无包
  1. 当写好一个java文件A.java后,可以在该目录的命令行中使用javac A.java来将它编译为.class文件.
  2. 使用java A来将它运行,注意不要在A后添加后缀名
(2)带包,
  1. 首先,包名要和目录名分别对应.
  2. 如果在com目录下有一个A.java文件,且A类属于包com. 编译时应当在com目录中使用javac A.java,会生成com/A.class
  3. 但运行时,应当在com目录外使用java com.A来将其执行.
(3)javac -d .
  1. 当不添加-d选项时,会在与java文件相同的目录下生成class文件
  2. 添加-d <目录> 时,会在指定的目录中生成class文件
  3. 添加-d .时,会在当前目录下按包结构生成class文件

注意class文件必须遵循严格的包结构对应的目录结构,而java文件没有这个限制.
所以,java文件作为源文件可以与class放在一起,也可以分开放.
java文件也可以全放入同级目录中,编译时添加-d .选项生成包目录结构.

3.import机制

import

一个java程序可以调用其他写好的class文件,为了避免重名,需要加上包名来唯一表示.
比如com.straightman.models.Essay.getID()是一个Essay类的静态函数.

这样写未免也太麻烦,有的时候你只会用到com.straight.models包里的Essay类而不可能用到其他的Essay类,就可以使用import com.straightman.models.Essay;提前声明.
之后只要直接写Essay.getID()就好.

CLASSPATH

上文中还有一个问题,java该从哪里去找那个com包?
答案是java会遍历所有的classpath,在每个路径里按上文的格式查找,直到找到对应的类或者返回一个错误.
所以,classpath就是用来告诉java你将你的目录结构或者依存包放置在了哪里,方便它去寻找.

jar

jar是按目录结构打包压缩好的class文件,可以直接在jvm里运行,也可以设置在classpath里然后去import其内部的内容.
在设置classpath时,可以将其视为一个文件夹.

4. java工程的几种配置方法

  1. 将所有的class文件与java文件对应混合放置,编译选项为javac A.class,将工程目录添加到classpath中.这样做的好处是结构清晰,不便之处是需要添加classpath.
  2. 将所有java文件放在统一目录中,编译选项为javac -d. A.class所有class文件按包结构放置,根目录与java文件同级.优势劣势与上方相反.
  3. 应该有更好的方法,但是我现在的servlet程序只需要编译成功即可,日后再补.

5. sublime配置

  1. 默认选项,javac -d. name.java编译,java name CMD中运行.适用于无包编译运行,以及以上的第2种情况.
  2. javac -d. name.java编译,java name sublime中运行.适用于不需运行或图形界面的场景.
  3. javac name.java编译,submie中运行,适用于以上的第一种情况的编译.
  4. javac name.java编译,cd.. && java package_name.name运行,一种玄学做法,适合于只有一层包的第一种情况,非常方便且不用加classpath.

不考虑第二种项目结构的情况下,简单来说

  1. 单文件编译CMD运行
  2. 单文件编译sublime运行
  3. 多层package中编译当前文件到当前目录,注意classpath.
  4. 单层package大杀器
{
    "shell_cmd": "javac -d . -encoding UTF-8  -Xlint:all \"$file\" && start cmd /c \"java \"$file_base_name\"   & pause>>nul\"",
    "file_regex": "^(...*?):([0-9]*):?([0-9]*)",
    "selector": "source.java",
    "encoding":"UTF-8",

    "variants": 
    [
        {   
        "name": "Run in sublime",
            "shell_cmd": "javac -d . -encoding UTF-8 -Xlint:all \"$file\" &&  java \"$file_base_name\"   & pause>>nul"
        },
        {   
        "name": "local compile",
            "shell_cmd": "javac  -encoding UTF-8 -Xlint:all \"$file\" &&  java \"$file_base_name\"   & pause>>nul"
        },
        {   
        "name": "single package",
            "shell_cmd": "@echo off& for %i in (\"%cd%\") do set x=%~ni& cd..& javac -encoding UTF-8 -Xlint:all \"$file\"&& start cmd /c \" java \"%x%.$file_base_name\"& pause>>nul\""
        },
    ]
}

6. java ee的sublime配置

暂时没什么好说的,附赠一个开局snippet

<snippet>
    <content><![CDATA[
package com;
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;

@WebServlet(
    name = "${1:Hello}Servlet",
    value = {"/${1:Hello}"},
    loadOnStartup = 0
)
public class ${1:Hello}Servlet extends HttpServlet
{
    public void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException
    {

    }
    public void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException
    {
        doPost(request,response);
    }
}
]]></content>
    <!-- Optional: Set a tabTrigger to define how to trigger the snippet -->
    <tabTrigger>servlet</tabTrigger>
    <!-- Optional: Set a scope to limit where the snippet will trigger -->
    <scope>source.java</scope>
</snippet>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值