用来编译java源文件的工具_基于阿里开源yugong工具类,动态编译Java源文件

适用场景:

Java应用满足用户自定义需求场景

实例代码:

测试用例(DynamicCompileTest)

package com.taobao.yugong.common;

import java.io.IOException;

import java.util.List;

import junit.framework.Assert;

import org.apache.commons.io.IOUtils;

import org.apache.commons.lang.StringUtils;

import org.apache.commons.lang.exception.ExceptionUtils;

import org.junit.Test;

import com.taobao.yugong.ITest;

import com.taobao.yugong.common.utils.compile.JdkCompiler;

public class DynamicCompileTest {

@Test

public void test() {

String javasource = null;

try {

List lines = IOUtils.readLines(Thread.currentThread()

.getContextClassLoader()

.getResourceAsStream("DynamicCompile.txt"));

javasource = StringUtils.join(lines, "\n");

} catch (IOException e) {

Assert.fail(ExceptionUtils.getFullStackTrace(e));

}

JdkCompiler compiler = new JdkCompiler();

Class> clazz = compiler.compile(javasource);

try {

System.out.println(((ITest) clazz.newInstance()).getPi());

} catch (InstantiationException e) {

Assert.fail(ExceptionUtils.getFullStackTrace(e));

} catch (IllegalAccessException e) {

Assert.fail(ExceptionUtils.getFullStackTrace(e));

}

}

}

源文件

package com.taobao.yugong;

public class DynamicCompile implements ITest {

@Override

public String getPi() {

return String.valueOf(Math.PI);

}

}

接口定义

package com.taobao.yugong;

public interface ITest {

public String getPi();

}

JdkCompiler文件定义,详见

https://github.com/alibaba/yugong

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/333543.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MacOS 下如何创建文本文件

文章目录通过 MacOS 自带的 Automator 创建自动化服务程序实用 Finder 扩展工具 - New File Menu通过 MacOS 自带的文本编辑程序创建通过 MacOS 自带的 Automator 创建自动化服务程序 欲知此方法请猛戳《MacOS 的 Automator 实用案例详解》 实用 Finder 扩展工具 - New File …

jdk12源代码文件_在JDK 11中启动单文件源代码程序

jdk12源代码文件JEP 330 –启动单文件源代码程序是即将发布的JDK 11(18.9)发行版中令人兴奋的功能之一。 此功能允许直接使用java解释器执行Java源代码。 源代码在内存中编译,然后由解释器执行。 限制是必须在同一文件中定义所有类。 对于刚…

java控制图片移动_多线程控制图片移动

帮忙看下为什么图片没有显示 图片目录在src 下的image 文件夹中package com.thread;import java.awt.EventQueue;import javax.swing.ImageIcon;import javax.swing.JFrame;import javax.swing.JLabel;public class SleepDemo extends JFrame implements Runnable {private JLa…

Linux 命令之 cut -- 分割字符串,显示或删除指定字段的内容,合并文件内容

文章目录一、命令介绍二、常用选项三、命令示例根据指定的字节范围显示指定文件中的内容指定字段分隔符,显示指定字段的内容显示指定字段的内容根据指定的字符范围显示指定文件中的内容显示指定字段以外的字段的内容以指定的输出分隔符来分割输出内容中的字段合并多…

java 抛异常 jvm_邪恶的Java技巧使JVM忘记检查异常

java 抛异常 jvm我长期以来一直在批评Java中编译器检查异常的机制。 无论您是爱还是恨,都可以肯定一件事:在某些情况下,您不想与他们打交道。 Java中的解决方案是将一个检查后的异常包装在new RuntimeException(e)但这可以提供较长的堆栈跟踪…

java空文本_输出到文本文件,控制台为空-Java

首先,您必须创建一个从OutputStream接口继承的类以实现适配器模式(我不确定是否是adapter)那么您可以使用该类作为波纹管主要PrintStream finalStream;TreeOutputStream tos;PrintStream out;out new PrintStream("logs.txt");tos new TreeOutputStream();tos.add(…

Linux 组合命令/命令组合的符号

在 EX 命令中,竖直线 | 是命令的分割符,它允许用户把多个命令组合在一起执行Shell 命令使用分号 ; 组合命令

混合多云架构_使用混合多云每个人都应避免的3个陷阱(第4部分)

混合多云架构每天都在肆意宣传云,但每个人都应避免三个陷阱。 从云,混合云到混合多云,您都被告知这是确保业务数字化未来的一种方式。 您必须做出的这些选择不会排除提高客户体验和敏捷交付这些应用程序的日常工作。 让我们开始一段旅程&…

Linux 中常见的较为复杂的命令实例

文章目录 命令 find 和命令 grep 联合使用命令 find 和 命令 convert 联合使用命令 find 和命令 rm 联合使用命令 find 和命令 xargs 联合使用命令 sed 和目录 grep 联合使用命令 find 和命令 grep 联合使用 [root@htlwk0001host test]# find . -name "*.txt" -exec…

mysql 触发器 注意事项_MySQL触发器的利弊-使用MySQL触发器时应该注意的事项

在MySQL中,触发器可以在你执行INSERT、UPDATE或DELETE的时候,执行一些特定的操作。在创建触发器时,可以指定是在执行SQL语句之前或是之后执行这些操作。通过触发器,你可以实现一些业务逻辑或一些数据限制,在…

混合多云架构_使用混合多云每个人都应避免的3个陷阱(第2部分)

混合多云架构如果您已经完全控制了本地数据中心,但又不能停止利用和支付过多的资源,那么如何期望防止这些成本转嫁到您的云策略中呢? 每天都在肆意宣传云,但每个人都应避免三个陷阱。 从云,混合云到混合多云&#xff0…

Linux 系统中用于在文件内查找指定的字符串的命令 -- grep/egrep/fgrep 的区别详解

文章目录一、命令介绍grepegrepfgrep二、正则表达式元字符扩展集三、POSIX 字符集一、命令介绍 grep 一种强大的文本搜索工具,用于在文件内查找指定的字符串,在不使用转义符的前提下支持基本的正则表达式来搜索文本,并把匹配的行打印出来。…

rest api封装调用_如何从云功能调用外部REST API

rest api封装调用在之前的博客文章中,我展示了如何创建您的第一个云功能 (以及一个视频 )。 您的云函数很可能需要调用外部REST API。 以下教程将向您展示如何创建此类功能(非常简单)。 登录到IBM Cloud帐户 点击目录…

SVN 版本控制的数据合并规则

文章目录自己的猜想文件名比对文本行比对事实是什么提交计划提交数据更新客户端版本库数据时,同名文件中文本行的数据比对规则自己的猜想 假设SVN服务端就存在一份最新版的文件 HF,客户端检出这份文件后再提交,当前用户提交的文件称为 NF。 …

java算术运算符的分类_6.Java算术运算符

1.算术运算符的分类:算术运算符:* :( 正数,加法 ,连接符)* 连接符: 如果数据和字符串连接一起就是用了"",那么""就成了连接符,拼接字符串* 任何数据与字符串使用连接符那么结果的数据类型都是字符串类型* 任何数据和数据相加就是做加法…

java项目教训_[免费电子书]分析超过600,000个Java项目的经验教训

java项目教训建立明智的错误处理工作流程需要什么? 调查和解决生产中的应用程序错误对于维持性能和可靠性至关重要。 但是,这并不意味着要花很多时间。 要理解为什么在生产中的故障排除,可这样的头痛,我们开始发现“真理”我们经…

MacOS 的软件包管理工具 MacPorts

MacPorts 就像 Homebrew 一样,可以管理 MacOS 的软件包,和 Linux 系统下的 apt-get、yum 一样。 官方网址:https://www.macports.org/index.php

java plus方法_Java.math.BigDecimal.plus()方法实例

全屏Java.math.BigDecimal.plus()方法实例java.math.BigDecimal.plus() 返回一个BigDecimal,其值是 (this),并且其刻度为是 this.scale().这种方法,它只是返回此BigDecimal是包括对称性与一元减号方法negate()。声明以下是java.math.BigDecim…

java jdk设置字符集_使用JDK 11在Java字符串上的新方法

java jdk设置字符集Java的String类似乎将在JDK 11中获得一些新方法,该方法将于2018年9月发布。 错误号 错误标题 新的String方法 描述 JDK-8200425 字符串::行 lines() “使用专用的分隔符从源字符串中懒散地提供行的字符串实例方法。” JDK-8200378 Stri…

MacOS 如何安装 SVN 命令终端

I purchased a new Mac running Mac OS X v10.8.5 (Mountain Lion). I’ve seen it written in various places that SVN is installed on OS X by default, but when I open a terminal and type which svn the program is not found. I’ve also run find / -name svn to che…