zoukankan      html  css  js  c++  java
  • Java项目开发(一)-不借助集成工具创建Java项目并编写编译执行脚本

    2021-01-07

    Java项目开发(一)

    前提是安装配置了java环境。

    我们这里面Java项目开发不用Idea、Eclipse、MyEclipse等生成Java项目,而是我们自己建的,用编辑器编辑,从命令行角度去执行。缺点是没有代码提示补全、纠错等功能。

    项目的目录结构如下所示

    这些目录和文件都是手动创建的:
    java-project(项目根目录)
      |--src
      |    |--main(主目录)
      |    |    |--java(存放项目的.java文件)
      |    |    |    |--com(包目录)
      |    |    |    |    |--mycompany
      |    |    |    |    |    |--mypro
      |    |    |    |    |    |    |--App.java
      |    |    |--resources
      |    |    |    |--application.properties
      |    |--test(测试代码目录)
      |    |    |--java(存放项目的.java文件)
      |    |    |    |--com(包目录)
      |    |    |    |    |--mycompany
      |    |    |    |    |    |--mypro
      |    |    |    |    |    |    |--AppTest.java
      |    |    |--resources
      |    |    |    |--application.properties
      |--libs(这里存放可能用到第三方的jar包)
      |--javaproject.bat(用于执行项目的Windows脚本文件)
      |--javaproject.sh(用于执行项目的Linux脚本文件)
      |--javaproject.txt(项目说明)
      |--sourcefiles(一个或多个对源文件进行列表的文件。)

    我们没有引入第三方jar包

    源码结构说明

    其中,App.java如下所示:

    这里 com.mycompany.mypro 是包名,和目录 commycompanymypro 对应。

    package com.mycompany.mypro;
    
    public class App {
        public static void main(String[] args) {
            System.out.println("Hello Java!");
        }
    }
    

    其中,AppTest.java如下所示:

    package com.mycompany.mypro;
    
    public class AppTest {
        public static void main(String[] args) {
            System.out.println("Hello Test!");
        }
    }

    resources目录中可以写项目的配置文件,比如application.propertites,这里由于例子太简单,我就没有去实现。

    javaproject.bat需要将编码格式改为ANSI或者GBK,因为在Windows下执行的脚本。否则,执行程序时,会出现中文乱码。

    javaproject.bat如下所示:

    @REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
    @echo off
    @REM set title of command window
    title %0
    
    @REM 当前脚本文件所在的路径
    set CurProPath=%~dp0
    @REM 设置 java文件目录
    set JavaPath=%CurProPath%srcmainjava
    @REM 设置 java文件测试目录
    set JavaTestPath=%CurProPath%src	estjava
    @REM 设置资源目录
    set JavaResourcePath=%JavaPath%resources
    @REM 设置 class 目录
    set JavaClassPath=%CurProPath%targetclasses
    @REM 设置基础包名
    set GroupIdPath=commycompanymypro
    set GroupId=com.mycompany.mypro
    @REM 判断 class 目录是否存在,不存在就创建
    if not exist %JavaClassPath% (
        md %JavaClassPath%
        echo %JavaClassPath% 目录不存在,已创建该目录!
    ) else (
        echo %JavaClassPath% 目录已存在,无需创建!
    )
    @REM 把java目录里面的资源文件 copy 到 class 目录中
    if exist %JavaResourcePath% (
        copy %JavaResourcePath%* %JavaClassPath%
    )
    
    @setlocal
    
    set ERROR_CODE=0
    
    @REM To isolate internal variables from possible post scripts, we use another setlocal
    @setlocal
    
    @REM ==== START VALIDATION ====
    if not "%JAVA_HOME%" == "" goto OkJHome
    
    echo.
    echo Error: JAVA_HOME not found in your environment. >&2
    echo Please set the JAVA_HOME variable in your environment to match the >&2
    echo location of your Java installation. >&2
    echo.
    goto error
    
    :OkJHome
    if exist "%JAVA_HOME%injava.exe" goto init
    echo.
    echo Error: JAVA_HOME is set to an invalid directory. >&2
    echo JAVA_HOME = "%JAVA_HOME%" >&2
    echo Please set the JAVA_HOME variable in your environment to match the >&2
    echo location of your Java installation. >&2
    echo.
    goto error
    
    @REM ==== END VALIDATION ====
    
    :init
    set lib=.;targetclasses
    
    @REM %JAVA_HOME%injavac -d targetclasses -sourcepath srcjava -classpath targetclasses .srcmainjavacommycompanymyproApp.java
    @REM %JAVA_HOME%injavac -d targetclasses -sourcepath srcjava -classpath targetclasses .src	estjavacommycompanymyproAppTest.java
    
    @REM %JAVA_HOME%injavac -d targetclasses -sourcepath srcjava -classpath targetclasses %JavaPath%%GroupIdPath%App.java
    @REM %JAVA_HOME%injavac -d targetclasses -sourcepath srcjava -classpath %lib% %JavaPath%%GroupIdPath%App.java
    %JAVA_HOME%injavac -d targetclasses -sourcepath srcjava -classpath %lib% @sourcefiles
    
    @REM %JAVA_HOME%injava -classpath targetclasses %GroupId%.App
    %JAVA_HOME%injava -classpath %lib% %GroupId%.App
    
    exit
    @pause

    javaproject.sh是linux下执行的脚本文件,由于时间原因,我这里没有写。

    javaproject.txt是项目的说明文件,随便写。

    sourcefiles文件是一个或多个对源文件进行列表的文件,如下所示:

    .srcmainjavacommycompanymyproApp.java
    .src	estjavacommycompanymyproAppTest.java

    命令行执行脚本文件:

    切换到该项目目录下,javaproject.bat就在该目录下,运行
    .javaproject.bat

    结果如下图:

     新的目录结构如下所示:

    我们引入第三方jar包

     我们现在的目录如下所示,我们只是添加了一个App2.java文件,并在libs中引入fastjson-1.2.68.jar包,并修改了javaproject.bat和sourcefiles

     App2.java如下所示:

    package com.mycompany.mypro;
    
    import com.alibaba.fastjson.JSON;
    import com.alibaba.fastjson.JSONObject;
    
    public class App2 {
        public static void main(String[] args) {
            String jsonString = "{"password":"123456","username":"dmego"}";
            JSONObject jsonObject = JSON.parseObject(jsonString);
            jsonObject.put("password", "123");
            jsonObject.put("username","zzz");
            String json = JSON.toJSONString(jsonObject);
            System.out.println(json);
        }
    }

    javaproject.bat主要修改 init 之后的代码:

    @REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
    @echo off
    @REM set title of command window
    title %0
    
    @REM 当前脚本文件所在的路径
    set CurProPath=%~dp0
    @REM 设置 java文件目录
    set JavaPath=%CurProPath%srcmainjava
    @REM 设置 java文件测试目录
    set JavaTestPath=%CurProPath%src	estjava
    @REM 设置资源目录
    set JavaResourcePath=%JavaPath%resources
    @REM 设置 class 目录
    set JavaClassPath=%CurProPath%targetclasses
    @REM 设置基础包名
    set GroupIdPath=commycompanymypro
    set GroupId=com.mycompany.mypro
    @REM 判断 class 目录是否存在,不存在就创建
    if not exist %JavaClassPath% (
        md %JavaClassPath%
        echo %JavaClassPath% 目录不存在,已创建该目录!
    ) else (
        echo %JavaClassPath% 目录已存在,无需创建!
    )
    @REM 把java目录里面的资源文件 copy 到 class 目录中
    if exist %JavaResourcePath% (
        copy %JavaResourcePath%* %JavaClassPath%
    )
    
    @setlocal
    
    set ERROR_CODE=0
    
    @REM To isolate internal variables from possible post scripts, we use another setlocal
    @setlocal
    
    @REM ==== START VALIDATION ====
    if not "%JAVA_HOME%" == "" goto OkJHome
    
    echo.
    echo Error: JAVA_HOME not found in your environment. >&2
    echo Please set the JAVA_HOME variable in your environment to match the >&2
    echo location of your Java installation. >&2
    echo.
    goto error
    
    :OkJHome
    if exist "%JAVA_HOME%injava.exe" goto init
    echo.
    echo Error: JAVA_HOME is set to an invalid directory. >&2
    echo JAVA_HOME = "%JAVA_HOME%" >&2
    echo Please set the JAVA_HOME variable in your environment to match the >&2
    echo location of your Java installation. >&2
    echo.
    goto error
    
    @REM ==== END VALIDATION ====
    
    :init
    @REM set lib=.;targetclasses
    set lib=.;targetclasses;libsfastjson-1.2.68.jar
    
    @REM %JAVA_HOME%injavac -d targetclasses -sourcepath srcjava -classpath targetclasses .srcmainjavacommycompanymyproApp.java
    @REM %JAVA_HOME%injavac -d targetclasses -sourcepath srcjava -classpath targetclasses .src	estjavacommycompanymyproAppTest.java
    
    @REM %JAVA_HOME%injavac -d targetclasses -sourcepath srcjava -classpath targetclasses %JavaPath%%GroupIdPath%App.java
    @REM %JAVA_HOME%injavac -d targetclasses -sourcepath srcjava -classpath %lib% %JavaPath%%GroupIdPath%App.java
    %JAVA_HOME%injavac -d targetclasses -sourcepath srcjava -classpath %lib% @sourcefiles
    
    @REM %JAVA_HOME%injava -classpath targetclasses %GroupId%.App
    @REM %JAVA_HOME%injava -classpath %lib% %GroupId%.App
    %JAVA_HOME%injava -classpath %lib%;%JAVA_HOME%lib;%JAVA_HOME%lib	ools.jar;%JAVA_HOME%libdt.jar %GroupId%.App2
    
    exit
    @pause

    sourcefiles如下所示:

    .srcmainjavacommycompanymyproApp.java
    .srcmainjavacommycompanymyproApp2.java
    .src	estjavacommycompanymyproAppTest.java

    命令行执行脚本文件:

    切换到该项目目录下,javaproject.bat就在该目录下,运行
    .javaproject.bat

    执行结果:

    执行脚本之后的结构目录如下图所示:

     

  • 相关阅读:
    什么是Servlet?
    哪种情况下用哪种域对象
    相对于Statement,PreparedStatement的优点是什么?
    JDBC的PreparedStatement是什么?
    execute,executeQuery,executeUpdate的区别是什么?
    什么是JDBC,在上面时候会用到它?
    ArrayList、LinkedList、Vector 的区别。
    int 和 Integer 有什么区别
    Java 为每个原始类型提供了哪些包装类型
    什么是JDBC,在上面时候会用到它?
  • 原文地址:https://www.cnblogs.com/zhangchao0515/p/14247888.html
Copyright © 2011-2022 走看看