有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    好的,在朋友的帮助下,我知道实际的命令应该是什么样子:

    schemagen -cp D:\Temp\jackson-annotations-2.5.4.jar -d D:\Temp Book.java

    事实证明,我们只需要指定jar,而不需要指定依赖jar。在这个简化的场景中,这一点也不明显,但是如果在Linux上通过classpath(-cp参数)传递多个源,那么这些源需要用冒号而不是分号分隔。基本上,这就是让我陷入白费力气的问题