类冲突解决实例
所属分类 java
浏览量 8
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
上一篇
下一篇
含胸驼背头前伸的危害
每天走路两万步会伤膝盖吗
行星文明
经典科幻电影里的人工智能角色