繁体   English   中英

在Fly上生成Java类并添加到类路径

[英]To generate Java Class on Fly and add to class path

我正在运行中生成一个Java类,并尝试对其调用方法。 为此,似乎我必须执行以下操作

  • 编译类(javac文件名将不起作用,因为它取决于其他依赖项)
  • 在运行时将类添加到类路径

我该如何实现?

我使其与JavaCompiler和Custom类加载器一起工作,如下所示。

 private Path compileSource(Path javaFile, String contractFileNameWithoutExtension) {
        JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
        compiler.run(null, null, null, javaFile.toFile().getAbsolutePath());
        return javaFile.getParent().resolve(contractFileNameWithoutExtension+".class");
    }


public Class findClass(String name) {
        String filePath = sourceCodeLocation +"/"+ name.replace(".", "/")+".class";
        byte[] b = loadClassFromFile(filePath);
        return defineClass(name, b, 0, b.length);
    }

    private byte[] loadClassFromFile(String fileName)  {
        try {
            InputStream inputStream = FileUtils.getFileInputStream.apply(fileName);
            byte[] buffer;
            ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
            int nextValue = 0;
            try {
                while ((nextValue = inputStream.read()) != -1) {
                    byteStream.write(nextValue);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            buffer = byteStream.toByteArray();
            return buffer;
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM