Java';默认的JAXB实现是在我的类路径上选择的
我已经编写了一个java应用程序,它利用JAXB进行XSL转换。我在类路径中包含了saxon9.jar,以便在命令行上使用XSLT2.0而不是XSLT1.0Java';默认的JAXB实现是在我的类路径上选择的,java,xml,xslt,jaxb,classpath,Java,Xml,Xslt,Jaxb,Classpath,我已经编写了一个java应用程序,它利用JAXB进行XSL转换。我在类路径中包含了saxon9.jar,以便在命令行上使用XSLT2.0而不是XSLT1.0 java -classpath ./lib/saxon9.jar:./ -jar myApp.jar 我在XSL中包含了报告所用XSLT的代码 <xsl:comment><xsl:text > </xsl:text>XSLT Version: <xsl:value-of select="syste
java -classpath ./lib/saxon9.jar:./ -jar myApp.jar
我在XSL中包含了报告所用XSLT的代码
<xsl:comment><xsl:text >
</xsl:text>XSLT Version: <xsl:value-of select="system-property('xsl:version')" /> <xsl:text >
</xsl:text>XSLT Vendor: <xsl:value-of select="system-property('xsl:vendor')" /> <xsl:text >
</xsl:text>XSLT Vendor URL: <xsl:value-of select="system-property('xsl:vendor-url')" /> <xsl:text >
</xsl:text></xsl:comment>
这是JVM的一部分的默认实现
如何让它使用我指定的萨克森?
跟进: 因此,这些方法都不起作用(除了将saxon jar放在认可的目录中),但它们都应该起作用。似乎我使用“-jar myApp.jar”和想要一个替代XSLT实现的组合是不兼容的。换句话说 java-Djavax.xml.transform.TransformerFactory=net.sf.saxon.TransformerFactoryImpl-classpath./lib/saxon9.jar:./-jar myApp.jar …不起作用,但这确实 java-Djavax.xml.transform.TransformerFactory=net.sf.saxon.TransformerFactoryImpl-classpath./lib/saxon9.jar:./myApp.jar org.dacracot.myApp …有趣的是,我甚至不必指定工厂,我得到了撒克逊版本
java-classpath./lib/saxon9.jar:./myApp.jar org.dacracot.myApp您尝试过将jar放在目录中吗 如果不希望效果是全局的,请使用以下选项:
-Djava.endorsed.dirs=my_dir
在命令行中。怎么样
java -classpath ./lib/saxon9.jar:./ -jar myApp.jar
java -Xbootclasspath:lib/saxon9.jar -classpath . -jar myApp.jar
此系统属性应设置替换TransformerFactory:
java -Djavax.xml.transform.TransformerFactory=com.foobar.AcmeTransformer MyApp
我相信您想要的工厂类是net.sf.saxon.TransformerFactoryImpl查看javadoc,了解配置工厂的所有可能方法
您发布的最后一个示例(w/o-Djavax…)之所以有效,是因为META-INF/services目录包含一个名为 java.xml.transform.TransformerFactory 内容 net.sf.saxon.TransformerFactoryImpl 使用的原因
java -cp lib/saxon9.jar;myjar.jar
作品及
java -cp lib/saxon9.jar -jar myjar.jar
不需要说明的是,使用-jar选项会告诉java(w).exe忽略命令行的其余部分,并从jar的清单文件中提取所有内容(包括类路径)。如果将saxon9.jar放在jar清单的类路径中,它应该可以工作
Manifest-Version: 1.0
Main-Class: net.my.MainClass
Class-Path: lib/saxon9.jar
这很管用,但我确实不喜欢。更改整个JVM似乎与类路径的目的背道而驰。我知道。但是,这是替换JVM类的唯一方法,最好避免。即使使用自己的类加载器,也无法从java或javax包中加载类。这破坏了其他应用程序。。。即eclipse.Resulted:Error发生在VM java/lang/NoClassDefFoundError:java/lang/Object Abort trapOh的初始化过程中,在这种情况下,我想您需要将rt.jar添加到bootclasspath中。仍在获取。。。线程“thread-1”javax.xml.transform.TransformerFactoryConfigurationError中出现异常:在javax.xml.transform.TransformerFactory.newInstance(TransformerFactory.java:109)中未找到提供程序net.sf.saxon.TransformerFactoryImpl,使用。。。java-Djavax.xml.transform.TransformerFactory=net.sf.saxon.TransformerFactoryImpl-classpath./lib/saxon9.jar:./-jar myApp.jar