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
执行结果:
执行脚本之后的结构目录如下图所示: