场景如下:我有一个 java 包 ( myapp.config ),其中包含我所有的 JAXB 注释类,我想从中生成一个 XML 模式文件。包中还有一个package-info.java文件,该文件包含包元素上的@XmlSchema注解,因此在整个包中有效:
@XmlSchema(namespace="http://myapp/config",
xmlns = @XmlNs(prefix="myapp", namespaceURI="http://myapp/config"),
elementFormDefault=XmlNsForm.QUALIFIED)
package myapp.config;
当我运行 JDK 自带的schemagen命令行工具时,
D:\Projects\Myapp>"%JAVA_HOME%/bin/schemagen" -cp "%JAVA_HOME%/lib/tools.jar"
src/myapp/config/*.java
我得到了正确的结果:生成的schema1.xsd文件中的根元素包含targetNamespace和其他必要的属性:
<xs:schema elementFormDefault="qualified" version="1.0"
targetNamespace="http://myapp/config"
xmlns:tns="http://myapp/config"
xmlns:myapp="http://myapp/config">
xmlns:xs="http://www.w3.org/2001/XMLSchema" >
但是,当我想在我的 Ant 脚本中执行相同的任务时,
<schemagen srcdir="src/myapp/config" destdir="dist">
<include name="*.java"/>
</schemagen>
schemagen 工具似乎完全忽略了命名空间注释,因为在生成的schema1.xsd文件中,没有它们的踪迹:
<xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">
当我在详细和调试模式下运行schemagen任务时,很明显该工具确实加载了所有.java文件,除了package-info.java,这就是它对命名空间一无所知的原因。
你以前遇到过这种奇怪的行为吗?为什么命令行工具处理包信息文件,而 Ant 任务不处理?我应该怎么做才能使 Ant 任务工作?
在此先感谢
,