Java jdk8和maven-jaxb2-plugin的SAXParseException
如果您使用类似于Java jdk8和maven-jaxb2-plugin的SAXParseException,java,maven,xsd,Java,Maven,Xsd,如果您使用类似于org.jvnet.jaxb2.maven2:maven-jaxb2-plugin的插件来解析xsd文件,那么从jdk7升级到jdk8时会遇到此异常: org.xml.sax.SAXParseException;systemId:file:/D:/Work/my/schema.xsd;行号:27 ;;栏目号:133;架构\ U引用:未能读取架构文档“CoreComponentsTechnicalSpecification-1p0.xsd”,因为由于accessExternalSc
org.jvnet.jaxb2.maven2:maven-jaxb2-plugin
的插件来解析xsd文件,那么从jdk7升级到jdk8时会遇到此异常:
org.xml.sax.SAXParseException;systemId:file:/D:/Work/my/schema.xsd;行号:27 ;;栏目号:133;架构\ U引用:未能读取架构文档“CoreComponentsTechnicalSpecification-1p0.xsd”,因为由于accessExternalSchema属性设置的限制,不允许访问“文件”。
如何使这个插件与jdk8一起工作?这个问题的根本原因与jdk8相同。有两种方法可以解决此问题: 设置javax.xml.accessExternalSchema系统属性: 如果您仅在本地构建,则可以将此行添加到/path/to/jdk1.8.0/jre/lib下名为jaxp.properties(如果不存在)的文件中:
javax.xml.accessExternalSchema=all
如果您可能正在与其他人一起处理项目,尤其是在他们仍在使用jdk7的情况下,这将不起作用。您可以使用命令行上指定的系统属性运行maven构建:
$mvn <target and options> -Djavax.xml.accessExternalSchema=all
设置目标版本: 如果不想使用系统属性,可以将
maven-jaxb2-plugin
设置为目标版本2.0:
<plugin>
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<version>${maven.plugin.jaxb2.version}</version>
<configuration>
<args>
<arg>-target</arg>
<arg>2.0</arg>
</args>
</configuration>
</plugin>
org.jvnet.jaxb2.maven2
maven-jaxb2-plugin
${maven.plugin.jaxb2.version}
-目标
2
使用2.4版本的插件:
<externalEntityProcessing>true</externalEntityProcessing>
true
你看到了吗?@Stefan当然看到了,但是这个问题虽然有相同的根本原因,但与maven插件的代码生成无关。嗨,Niel,我使用的是JRE1.8.0_111,我找不到文件jaxp.properties。知道吗?不知道,抱歉@AyadiAkremproperties maven插件与1.6版本的jaxb2 maven插件配合使用
<plugin>
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<version>${maven.plugin.jaxb2.version}</version>
<configuration>
<args>
<arg>-target</arg>
<arg>2.0</arg>
</args>
</configuration>
</plugin>
<externalEntityProcessing>true</externalEntityProcessing>