Byte-buddy中如何关联package-info和class?
How to associate package-info with class in Byte-buddy?
我在下一个代码中创建包 foo.bar
和 class foo.bar.BarCl
的包信息
public static void main(String[] args) throws ClassNotFoundException, IOException {
DynamicType.Unloaded<?> make = new ByteBuddy().makePackage("foo.bar").make();
DynamicType.Loaded<Object> load = new ByteBuddy()
.subclass(Object.class)
.name("foo.bar.BarCl")
.make()
.include(make)
.load(Main2.class.getClassLoader(), ClassLoadingStrategy.Default.INJECTION);
load.saveIn(new File("folder"));
Class<?> loaded = load.getLoaded();
System.out.println(loaded.getPackage());
}
Class 和包信息正确写入文件夹:
package foo.bar;
interface $$package-info /* Real name is 'package-info' */ {
}
package foo.bar;
public class BarCl {
public BarCl() {
}
}
但是在运行时注入这个 classes 我得到 loaded.getPackage()==null
我如何将包信息与生成的 class?
相关联
P.S。在实际任务中,我需要使用指定 xml 命名空间的 JAXB 注释 @XmlSchema
生成包信息。没有它,classes 有命名冲突
包是 class 加载程序的责任,而不是由 package-info
class 定义的。您可以定义它们 using the loader DSL.
我在下一个代码中创建包 foo.bar
和 class foo.bar.BarCl
的包信息
public static void main(String[] args) throws ClassNotFoundException, IOException {
DynamicType.Unloaded<?> make = new ByteBuddy().makePackage("foo.bar").make();
DynamicType.Loaded<Object> load = new ByteBuddy()
.subclass(Object.class)
.name("foo.bar.BarCl")
.make()
.include(make)
.load(Main2.class.getClassLoader(), ClassLoadingStrategy.Default.INJECTION);
load.saveIn(new File("folder"));
Class<?> loaded = load.getLoaded();
System.out.println(loaded.getPackage());
}
Class 和包信息正确写入文件夹:
package foo.bar;
interface $$package-info /* Real name is 'package-info' */ {
}
package foo.bar;
public class BarCl {
public BarCl() {
}
}
但是在运行时注入这个 classes 我得到 loaded.getPackage()==null
我如何将包信息与生成的 class?
P.S。在实际任务中,我需要使用指定 xml 命名空间的 JAXB 注释 @XmlSchema
生成包信息。没有它,classes 有命名冲突
包是 class 加载程序的责任,而不是由 package-info
class 定义的。您可以定义它们 using the loader DSL.