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