Java超实用小组件

components


component-compile:编译

maven坐标

<dependency>
    <groupId>com.idea-aedi</groupId>
    <artifactId>component-compile</artifactId>
    <version>${最新版本}</version>
</dependency>

使用示例

// 全类名-class字节数组
Map<String, byte[]> byteCodes = Compiler.create().addSource(
        CompilerTest.class.getClassLoader().getResourceAsStream("TestLogger1.java")
        ).buildByteCodes();

更多用法,详见其它示例,或者直接看源码。

component-decompile:反编译

maven坐标

<dependency>
    <groupId>com.idea-aedi</groupId>
    <artifactId>component-decompile</artifactId>
    <version>${最新版本}</version>
</dependency>

使用示例

List<byte[]> list = new ArrayList<>(8);
list.add(IOUtil.toBytes(new File(decompileDir, "klass/AbstractClassGenerator$ClassLoaderData$1.class")));
list.add(IOUtil.toBytes(new File(decompileDir, "klass/AbstractClassGenerator$ClassLoaderData.class")));
list.add(IOUtil.toBytes(new File(decompileDir, "klass/AbstractClassGenerator.class")));
list.add(IOUtil.toBytes(new File(decompileDir, "klass/AbstractClassGenerator$ClassLoaderData$3.class")));
list.add(IOUtil.toBytes(new File(decompileDir, "klass/AbstractClassGenerator$Source.class")));
list.add(IOUtil.toBytes(new File(decompileDir, "klass/AbstractClassGenerator$ClassLoaderData$2.class")));
/*
 * 反编译获取源码并解析全类名<br>
 * @see Decompiler#decompile(List, String)
 *
 * @param classByteList
 *            待反编译的clas
 * @return <ul>
 *     <li>左 - 全类名<br>形如:com.szlzcl.jdk8feature.OptionalTests.MyConsumer</li>
 *     <li>中 - 源码的classFilePath<br>形如:com/szlzcl/jdk8feature/OptionalTests$MyConsumer.class</li>
 *     <li>右 - 源码<br>注意:反编译失败或找不存要反编译的目标方法时,值为空白字符串</li>
 * </ul>
 */
List<Triple<String, String, String>> triples = Decompiler.defaultDecompiler().decompileAsTriple(list);

更多用法,详见其它示例,或者直接看源码。

component-decompile:dump出class

maven坐标

<dependency>
    <groupId>com.idea-aedi</groupId>
    <artifactId>component-dump-class</artifactId>
    <version>${最新版本}</version>
</dependency>

使用示例

// key - 类名,   value - (k - 加载该类的类加载器信息, v - class字节码)
Map<String, Map<String, byte[]>> dumpedClasses = NonExitClassFileTransformerExecutor.create("com.ideaaedi.component.dump", null, false).exec();
dumpedClasses.forEach((k, map) -> {
    System.out.println(k + "\t" + map.keySet() + "\t" + map.values());
});

更多用法,详见其它示例,或者直接看源码。


相关资料

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值