使用代码把一个目录打包成jar

简介: 使用代码把一个目录打包成jar

订阅专栏

具体代码如下:


private String javaClassPath = "";
    private byte[] readerBuffer = new byte[4096];
    private void addFileToJar(File source, JarOutputStream target) throws IOException
    {
        BufferedInputStream in = null;
        try
        {
            if (source.isDirectory())
            {
                for (File nestedFile : source.listFiles())
                {
                    addFileToJar(nestedFile, target);
                }
                return;
            }
            String middleName = source.getPath().replace("\\", "/").substring(javaClassPath.length());
            if (middleName.startsWith("/"))
            {
                middleName = middleName.substring(1);
            }
            JarEntry entry = new JarEntry(middleName);
            entry.setTime(source.lastModified());
            target.putNextEntry(entry);
            in = new BufferedInputStream(new FileInputStream(source));
            while (true)
            {
                int count = in.read(readerBuffer);
                if (count == -1)
                {
                    break;
                }
                target.write(readerBuffer, 0, count);
            }
            target.closeEntry();
        }
        finally
        {
            if (in != null)
            {
                in.close();
            }
        }
    }
    void create(final String jarDataDir, final String destDir, final File jarSrc)
    {
        try
        {
            String jarName = jarSrc.getAbsolutePath();
            jarName = jarName.substring(jarName.lastIndexOf('\\')+1);
            jarName = destDir + File.separator + jarName;
            javaClassPath = jarDataDir;
            //Manifest manifest = new Manifest();
            //manifest.getMainAttributes().put(Attributes.Name.MANIFEST_VERSION, "1.0");
            //JarOutputStream target = new JarOutputStream(new FileOutputStream(destJarFile), manifest);
            JarOutputStream target = new JarOutputStream(new FileOutputStream(jarName));
            addFileToJar(new File(javaClassPath), target);
            target.close();
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }


本文假设目录下已有Manifest;也可以使用注释中的代码。能不能指定某个文件呢?还真没找到办法。

目录
相关文章
|
2月前
|
IDE Java Linux
Seata常见问题之重新打包以单独用jar来部署如何解决
Seata 是一个开源的分布式事务解决方案,旨在提供高效且简单的事务协调机制,以解决微服务架构下跨服务调用(分布式场景)的一致性问题。以下是Seata常见问题的一个合集
111 1
|
3月前
|
Java Maven
流水线之项目打包找不到rt.jar
自己打包的时候在maven中这样配置就可以<bootclasspath>${java.home}\lib\rt.jar;${java.home}\lib\jce.jar</bootclasspath>。但是在云效中不是自己的服务器,这样配置不可以,如何找到jdk的具体位置呢?
104 0
|
3天前
|
Java Android开发
Android module 打包成aar或jar
Android module 打包成aar或jar
11 0
|
9天前
|
Java
如何解决使用若依前后端分离打包部署到服务器上后主包无法找到从包中的文件的问题?如何在 Java 代码中访问 jar 包中的资源文件?
如何解决使用若依前后端分离打包部署到服务器上后主包无法找到从包中的文件的问题?如何在 Java 代码中访问 jar 包中的资源文件?
43 0
|
2月前
|
存储 XML Java
【Maven技术专题】「入门到精通」教你如何使用Maven中引用依赖本地Jar包,并进行打包输出
【Maven技术专题】「入门到精通」教你如何使用Maven中引用依赖本地Jar包,并进行打包输出
55 0
|
2月前
|
NoSQL Java 应用服务中间件
使用innoSetup将mysql+nginx+redis+jar包打包成windows安装包
使用innoSetup将mysql+nginx+redis+jar包打包成windows安装包
使用innoSetup将mysql+nginx+redis+jar包打包成windows安装包
|
1月前
|
Java Docker 容器
|
1月前
|
运维 Java Shell
Linux非常详细的shell运维脚本一键启动停止状态SpringBoot打成可运行jar包
Linux非常详细的shell运维脚本一键启动停止状态SpringBoot打成可运行jar包
32 0
|
2月前
|
Java Maven 微服务
springboot项目开启远程调试-jar包
springboot项目开启远程调试-jar包
25 0
|
22小时前
|
Java Go Maven
向 Maven 中央仓库上传一个修改过的基于jeecg的autoPOI的 jar包记录(二)
向 Maven 中央仓库上传一个修改过的基于jeecg的autoPOI的 jar包记录