标签:
一、编译部分
[java] view plaincopy
public void complier() throws IOException {
System.out.println("*** --> 开始编译java源代码...");
File javaclassDir = new File(javaClassPath);
if (!javaclassDir.exists()) {
javaclassDir.mkdirs();
}
List<String> javaSourceList = new ArrayList<String>();
getFileList(new File(javaSourcePath), javaSourceList);
JavaCompiler javaCompiler = ToolProvider.getSystemJavaCompiler();
int result = -1;
for (int i = 0; i < javaSourceList.size(); i++) {
result = javaCompiler.run(null, null, null, "-d", javaClassPath, javaSourceList.get(i));
System.out.println(result == 0 ? "*** 编译成功 : " + javaSourceList.get(i) : "### 编译失败 : " + javaSourceList.get(i));
}
System.out.println("*** --> java源代码编译完成。");
}
[java] view plaincopy
private void getFileList(File file, List<String> fileList) throws IOException {
if (file.isDirectory()) {
File[] files = file.listFiles();
for (int i = 0; i < files.length; i++) {
if (files[i].isDirectory()) {
getFileList(files[i], fileList);
} else {
fileList.add(files[i].getPath());
}
}
}
}
二、打包部分
[java] view plaincopy
public void generateJar() throws FileNotFoundException, IOException {
System.out.println("*** --> 开始生成jar包...");
String targetDirPath = targetPath.substring(0, targetPath.lastIndexOf("/"));
File targetDir = new File(targetDirPath);
if (!targetDir.exists()) {
targetDir.mkdirs();
}
Manifest manifest = new Manifest();
manifest.getMainAttributes().put(Attributes.Name.MANIFEST_VERSION, "1.0");
JarOutputStream target = new JarOutputStream(new FileOutputStream(targetPath), manifest);
writeClassFile(new File(javaClassPath), target);
target.close();
System.out.println("*** --> jar包生成完毕。");
}
[java] view plaincopy
private void writeClassFile(File source, JarOutputStream target) throws IOException {
BufferedInputStream in = null;
try {
if (source.isDirectory()) {
String name = source.getPath().replace("\\", "/");
if (!name.isEmpty()) {
if (!name.endsWith("/")) {
name += "/";
}
name = name.substring(javaClassPath.length());
JarEntry entry = new JarEntry(name);
entry.setTime(source.lastModified());
target.putNextEntry(entry);
target.closeEntry();
}
for (File nestedFile : source.listFiles())
writeClassFile(nestedFile, target);
return;
}
String middleName = source.getPath().replace("\\", "/").substring(javaClassPath.length());
JarEntry entry = new JarEntry(middleName);
entry.setTime(source.lastModified());
target.putNextEntry(entry);
in = new BufferedInputStream(new FileInputStream(source));
byte[] buffer = new byte[1024];
while (true) {
int count = in.read(buffer);
if (count == -1)
break;
target.write(buffer, 0, count);
}
target.closeEntry();
} finally {
if (in != null)
in.close();
}
}
三、使用
[java] view plaincopy
public static void main(String[] args) throws IOException, InterruptedException {
String currentDir = "c:/myProject";
String javaSourcePath = currentDir + "/src/main/java/";
String javaClassPath = currentDir + "/classes";
String targetPath = currentDir + "/target/MyProject.jar";
CompilerAndJarTools cl = new CompilerAndJarTools(javaSourcePath, javaClassPath, targetPath);
cl.complier();
cl.generateJar();
}
标签:
原文地址:http://my.oschina.net/sniperLi/blog/523631