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

    执行结果:

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

     

  • 相关阅读:
    STL源码剖析之_allocate函数
    PAT 1018. Public Bike Management
    PAT 1016. Phone Bills
    PAT 1012. The Best Rank
    PAT 1014. Waiting in Line
    PAT 1026. Table Tennis
    PAT 1017. Queueing at Bank
    STL源码剖析之list的sort函数实现
    吃到鸡蛋好吃,看看是哪只母鸡下的蛋:好用的Sqlite3
    cJSON
  • 原文地址:https://www.cnblogs.com/zhangchao0515/p/14247888.html
Copyright © 2011-2022 走看看