首页  

类冲突解决实例     所属分类 java 浏览量 7
java使用 poi-tl 1.10.6 生成word 报错 
java.lang.NoClassDefFoundError: org/openxmlformats/schemas/wordprocessingml/x2006/main/CTDrawing$Factory

com.deepoove:poi-tl:1.10.6

还有其他类似错误 

java.lang.NoSuchMethodError: 'boolean org.openxmlformats.schemas.wordprocessingml.x2006.main.CTRPr.isSetSz()'

java.lang.AbstractMethodError: Receiver class org.openxmlformats.schemas.wordprocessingml.x2006.main.impl.STHexColorAutoImpl 
does not define or inherit an implementation of the resolved method 
'abstract void set(org.apache.xmlbeans.StringEnumAbstractBase)' 
of interface org.openxmlformats.schemas.wordprocessingml.x2006.main.STHexColorAuto.


String file = "/xxx/test.docx";
String outputFile = "/xxx/test002_output.docx";
// 1. 封装要渲染的数据(Map/实体类都可以)
Map< String, Object> data = new HashMap<>();
data.put("name", "dyyx");
data.put("age", 21);
data.put("gender", "男");
data.put("intro", "poi-tl Word模板引擎测试");

// 2. 加载模板 + 渲染数据 + 生成文件(核心:XWPFTemplate)
XWPFTemplate.compile(file) // 模板路径
            .render(data)                // 渲染数据
            .writeToFile(outputFile); // 输出文件路径

System.out.println("outputFile="+outputFile);

word模版  test.docx
姓名:{{name}} 
年龄:{{age}} 
性别:{{gender}} 
简介:{{intro}}


解决思路 找出报错的类 是从哪个jar包加载的 Class c = org.openxmlformats.schemas.wordprocessingml.x2006.main.CTRPr.class; System.out.println(c.getClass()); // 获取类加载路径 java.security.ProtectionDomain pd = c.getProtectionDomain(); java.security.CodeSource cs = pd.getCodeSource(); if (cs != null) { java.net.URL url = cs.getLocation(); System.out.println("类加载路径:" + url); System.out.println("jar包位置:" + url.getFile()); } else { System.out.println("来自JDK/rt.jar 或 无源码jar"); } 类加载路径:file:/xxx/.m2/repository/org/apache/poi/poi-ooxml-schemas/4.1.2/poi-ooxml-schemas-4.1.2.jar jar包位置:/xxx/.m2/repository/org/apache/poi/poi-ooxml-schemas/4.1.2/poi-ooxml-schemas-4.1.2.jar

上一篇     下一篇
含胸驼背头前伸的危害

每天走路两万步会伤膝盖吗

行星文明

经典科幻电影里的人工智能角色