小编Ser*_*kov的帖子

如何删除/缩小“导入 some.clazz.SomeClass;” 通过 Java 中的字节码操作库/框架来声明?

我有以下课程:

    package some.clazz.client;

    import some.clazz.SomeClass;

    public class SomeClassClient {
        ...
        public SomeClass getProc();
        ...
    }
Run Code Online (Sandbox Code Playgroud)

我已经通过在Maven 插件中使用ByteBuddy 转换getProc()SomeClassClient类字节码中删除/缩小/删除了这个Java 方法。但是语句仍然存在并由!new MemberRemoval().stripMethods(ElementMatcher);net.bytebuddy:byte-buddy-maven-pluginimport some.clazz.SomeClass;CFR Java Decompiler

SomeClass类中没有任何其他对类的引用SomeClassClient

如何从字节码中删除这个导入语句(我真的假设它位于常量池中)?因为我在尝试使用“SomeClassClient”类时仍然遇到 ClassNotFoundException。

我的课

public class MethodsRemover implements net.bytebuddy.build.Plugin {
    ...
    @Override
    public DynamicType.Builder<?> apply(DynamicType.Builder<?> builder,
                                        TypeDescription typeDescription,
                                        ClassFileLocator classFileLocator) {
        try{
            return builder.visit(new MemberRemoval().stripMethods(
                ElementMatchers.any().and(
                    isAnnotatedWith(Transient.class)
                    .and(
                        t -> {
                            log.info(
                                "ByteBuddy transforming class: {}, strip method: {}",
                                typeDescription.getName(),
                                t
                            );
                            return true;
                        }
                    ) …
Run Code Online (Sandbox Code Playgroud)

java bytecode bcel java-bytecode-asm byte-buddy

1
推荐指数
1
解决办法
120
查看次数

标签 统计

bcel ×1

byte-buddy ×1

bytecode ×1

java ×1

java-bytecode-asm ×1