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 是包名,和目录 com\mycompany\mypro 对应。

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%src\main\java
@REM 设置 java文件测试目录
set JavaTestPath=%CurProPath%src\test\java
@REM 设置资源目录
set JavaResourcePath=%JavaPath%resources
@REM 设置 class 目录
set JavaClassPath=%CurProPath%target\classes
@REM 设置基础包名
set GroupIdPath=\com\mycompany\mypro
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%\bin\java.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=.;target\classes

@REM %JAVA_HOME%\bin\javac -d target\classes -sourcepath src\java -classpath target\classes .\src\main\java\com\mycompany\mypro\App.java
@REM %JAVA_HOME%\bin\javac -d target\classes -sourcepath src\java -classpath target\classes .\src\test\java\com\mycompany\mypro\AppTest.java

@REM %JAVA_HOME%\bin\javac -d target\classes -sourcepath src\java -classpath target\classes %JavaPath%%GroupIdPath%\App.java
@REM %JAVA_HOME%\bin\javac -d target\classes -sourcepath src\java -classpath %lib% %JavaPath%%GroupIdPath%\App.java
%JAVA_HOME%\bin\javac -d target\classes -sourcepath src\java -classpath %lib% @sourcefiles

@REM %JAVA_HOME%\bin\java -classpath target\classes %GroupId%.App
%JAVA_HOME%\bin\java -classpath %lib% %GroupId%.App

exit
@pause

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

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

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

.\src\main\java\com\mycompany\mypro\App.java
.\src\test\java\com\mycompany\mypro\AppTest.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 当前脚本文件所在的路径
set CurProPath=%~dp0
@REM 设置 java文件目录
set JavaPath=%CurProPath%src\main\java
@REM 设置 java文件测试目录
set JavaTestPath=%CurProPath%src\test\java
@REM 设置资源目录
set JavaResourcePath=%JavaPath%resources
@REM 设置 class 目录
set JavaClassPath=%CurProPath%target\classes
@REM 设置基础包名
set GroupIdPath=\com\mycompany\mypro
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%\bin\java.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=.;target\classes
set lib=.;target\classes;lib\fastjson-1.2.68.jar

@REM %JAVA_HOME%\bin\javac -d target\classes -sourcepath src\java -classpath target\classes .\src\main\java\com\mycompany\mypro\App.java
@REM %JAVA_HOME%\bin\javac -d target\classes -sourcepath src\java -classpath target\classes .\src\test\java\com\mycompany\mypro\AppTest.java

@REM %JAVA_HOME%\bin\javac -d target\classes -sourcepath src\java -classpath target\classes %JavaPath%%GroupIdPath%\App.java
@REM %JAVA_HOME%\bin\javac -d target\classes -sourcepath src\java -classpath %lib% %JavaPath%%GroupIdPath%\App.java
%JAVA_HOME%\bin\javac -d target\classes -sourcepath src\java -cp %lib% @sourcefiles

@REM %JAVA_HOME%\bin\java -classpath target\classes %GroupId%.App
@REM %JAVA_HOME%\bin\java -classpath %lib% %GroupId%.App
@REM %JAVA_HOME%\bin\java -Dfile.encoding=UTF-8 -cp %lib%;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar %GroupId%.App2
%JAVA_HOME%\bin\java -Dfile.encoding=UTF-8 -cp %lib% %GroupId%.App2

@REM jar包
%JAVA_HOME%\bin\jar cvf target\classes.jar -C target\classes\ .    

exit
@pause

sourcefiles如下所示:

.\src\main\java\com\mycompany\mypro\App.java
.\src\main\java\com\mycompany\mypro\App2.java
.\src\test\java\com\mycompany\mypro\AppTest.java

命令行执行脚本文件:

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

执行结果:

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

 

 

posted @ 2021-01-07 18:13  秦时明月0515  阅读(503)  评论(0编辑  收藏  举报