java JAXB schemagen在处理具有Jackson属性的类时返回1作为错误代码
所以我试着想了一会儿。我有一个带有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(windows(echo %ERRORLEVEL%
)和linux(echo $?
)
现在我需要向这个类添加一些Jackson注释,所以我要添加一个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
没有输出任何错误消息。但我怀疑它找不到jackson jar,所以我将jackson注释jar(具有jackson core和jackson databind的依赖项)复制到公共D:\Temp位置并运行schemagen
,如下所示:
schemagen -cp d:\Temp -d d:\Temp Book.java
不幸的是,同样的结果,如果我这样运行:
schemagen -cp d:\Temp\* -d d:\Temp Book.java
我还将在控制台上得到单个null
输出(这里JAXB的家伙们非常强调冗长),并返回-1的代码
如何使用Jackson注释成功运行schemagen(返回代码0)?有什么建议吗
# 1 楼答案
好的,在朋友的帮助下,我知道实际的命令应该是什么样子:
schemagen -cp D:\Temp\jackson-annotations-2.5.4.jar -d D:\Temp Book.java
事实证明,我们只需要指定jar,而不需要指定依赖jar。在这个简化的场景中,这一点也不明显,但是如果在Linux上通过classpath(-cp参数)传递多个源,那么这些源需要用冒号而不是分号分隔。基本上,这就是让我陷入白费力气的问题