java源文件编译为jar_利用java代码实现java源文件的编译和打包为jar文件

一、编译部分

public void complier() throws IOException {

System.out.println("*** --> 开始编译java源代码...");

File javaclassDir = new File(javaClassPath);

if (!javaclassDir.exists()) {

javaclassDir.mkdirs();

}

List

javaSourceList = new ArrayList

(); 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源代码编译完成。"); }

private void getFileList(File file, List

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);

} e

lse {

fileList.add(files[i].getPath());

}

}

}

}

二、打包部分

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包生成完毕。");

}

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();

}

}

三、使用

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();

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值