首先,待处理的项目结构图如下所示。
.
├── WebContent
│ ├── META-INF
│ │ └── MANIFEST.MF
│ ├── WEB-INF
│ │ ├── classes
│ │ ├── lib
│ │ └── web.xml
│ └── index.jsp
├── makefile.py
└── src
└── com
└── hao
└── register
├── WebApi.java
└── WebApiTest.java
调用 makefile.py
之后的项目结构图。
.
├── WebContent
│ ├── META-INF
│ │ └── MANIFEST.MF
│ ├── WEB-INF
│ │ ├── classes
│ │ │ └── com
│ │ │ └── hao
│ │ │ └── register
│ │ │ ├── WebApi.class
│ │ │ └── WebApiTest.class
│ │ ├── lib
│ │ └── web.xml
│ └── index.jsp
├── register.war
├── makefile.py
└── src
└── com
└── hao
└── register
├── WebApi.java
└── WebApiTest.java
编译文件只说两点:
- 生成的时候,存放类目录为
./WebContent/WEB-INF/classes
,这是由Servlet 在执行Web程序时默认的。 - 打包的时候只要对
./WebContent
进行打包即可。
#!/bin/python
# sys.argv[0] = makefile.py
# sys.argv[1] = project direcotry
import os,sys
#-------------------- Initialization ------------------------------
print(sys.argv[1])
cwd=sys.argv[1] # current working directory
srcDir = cwd + "/src" # source code directory
outDir = cwd + "/WebContent/WEB-INF/classes" # output classes
seperator = ":" # semi-colon on windows
srcs = ["com.hao.register"] # namespaces to be compiled
outwar="register.war" # output jar file name
# libraries refered
libs = [("/Users/hao/MyApp/tomcat8534/lib", ["servlet-api.jar"])]
#-------------------- Formatting inputs ----------------------------
classpaths = srcDir
for item in libs:
for i in range(len(item[1])):
classpaths += seperator + os.path.join(item[0], item[1][i])
for i in range(len(srcs)):
srcs[i] = os.path.join(os.path.join(srcDir, srcs[i].replace(".", "/"), "*.java"))
sourcefiles = " ".join(srcs)
#--------- Generation of and execution compiling command -------------
os.chdir(os.getcwd())
cmdCompile = "javac -d {0} -cp {1} {2}".format(outDir, classpaths, sourcefiles)
print("Executing: " + cmdCompile)
os.system(cmdCompile)
cmdCompress = "jar cf {0}/{1} -C ./WebContent .".format(cwd, outwar)
print("Executing: " + cmdCompress)
os.system(cmdCompress)
print("Compiled.")