所以我试着弄清楚了一段时间。我有一个带有JAXB注释的Java类:
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class Book {
private String title;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}
然后,我可以按如下方式运行schemagen
:
schemagen -d d:Temp Book.java
并生成 XML 架构:schema1.xsd
。返回码为 0(同时尝试了窗口 ( echo %ERRORLEVEL%
( 和 linux ( echo $?
(。
现在我需要向此类添加一些杰克逊注释,因此我添加一个 JSON 属性:
import javax.xml.bind.annotation.XmlRootElement;
import com.fasterxml.jackson.annotation.JsonProperty;
@XmlRootElement
public class Book {
@JsonProperty("title")
private String title;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}
不幸的是,现在当我运行 schemagen 时,它似乎成功了(生成了模式文件(,但返回代码为 1(在 Linux 和 Windows 上(,这对我来说是有问题的,因为它会导致 gmake 失败。
可悲的是,schemagen
不会输出任何错误消息。但我怀疑它找不到杰克逊罐子,所以我将杰克逊注释罐子(具有杰克逊核心和杰克逊数据绑定的依赖项(复制到公共 D:\Temp 位置并运行schemagen
如下所示:
schemagen -cp d:Temp -d d:Temp Book.java
不幸的是,如果我像这样运行它,结果相同:
schemagen -cp d:Temp* -d d:Temp Book.java
我还将在控制台上输出单个null
(JAXB 人员在这里非常强调冗长(并返回代码 -1。
如何使用杰克逊注释成功运行架构(返回代码 0(?有什么建议吗?
好的,在朋友的帮助下,我知道实际命令应该是什么样子:
schemagen -cp D:Tempjackson-annotations-2.5.4.jar -d D:Temp Book.java
事实证明,我们只需要指定杰克逊注释jar,而不是依赖jar。在这个简化的场景中也不明显,但是如果您在 Linux 上的类路径(-cp 参数(上传递多个源,则需要用冒号而不是分号分隔这些源。基本上,这就是让我踏上大雁追逐的问题。