java 生成 xsd_java – 从jar中为类文件生成jaxb Xsd模式

我想从jar中的类文件生成jaxb xsd模式.目前,我使用jaxb2-maven-plugin使用

java文件生成模式.

org.codehaus.mojo

jaxb2-maven-plugin

${maven.plugin.jaxb2}

schemagen

schemagen

process-classes

true

com/someProject/domain/*.java

${project.build.directory}/schemas

true

但是,我有一个用例,我得到一个依赖jar文件,并希望从该jar文件中生成一些类.任何人都可以建议如何做到这一点.

最佳答案 为简单起见,我重用代码

presented in this article来演示从存储在Jar-archive中的Java类生成Jaxb Schema的必要步骤

代码由两个类组成 – 员工和地址:

package base.package;

import javax.xml.bind.annotation.XmlAccessType;

import javax.xml.bind.annotation.XmlAccessorType;

import javax.xml.bind.annotation.XmlAttribute;

import javax.xml.bind.annotation.XmlRootElement;

@XmlAccessorType(XmlAccessType.FIELD)

@XmlRootElement(name = "employee")

public class Employee

{

@XmlAttribute

private int id;

private String name;

private double salary;

private String designation;

private Address address;

public int getId() { return id; }

public void setId(int id) { this.id = id; }

public String getName() { return name; }

public void setName(String name) { this.name = name; }

public double getSalary() { return salary; }

public void setSalary(double salary) { this.salary = salary; }

public String getDesignation() { return designation; }

public void setDesignation(String designation) { this.designation = designation; }

public Address getAddress() { return address; }

public void setAddress(Address address) { this.address = address; }

}

和引用的类:

package base.package;

public class Address

{

private String line1;

private String line2;

private String city;

private String state;

private long zipcode;

public String getLine1() { return line1; }

public void setLine1(String line1) { this.line1 = line1; }

public String getLine2() { return line2; }

public void setLine2(String line2) { this.line2 = line2; }

public String getCity() { return city; }

public void setCity(String city) { this.city = city; }

public String getState() { return state; }

public void setState(String state) { this.state = state; }

public long getZipcode() { return zipcode; }

public void setZipcode(long zipcode) { this.zipcode = zipcode; }

}

现在使用以下命令编译此代码:javac -d bin src / base / package / * .java.这会将位于src中的所有源文件编译到bin目录:

base-dir

|- src

| \- base

| \- package

| |- Employee.java

| \- Address.java

\- bin

\- base

\- package

|- Employee.class

\- Address.class

要为编译的类获取正确的Jar-archive,请使用:jar -cf test.jar -C bin /.这将生成一个test.jar存档,其中包含以下内容:

test.jar

|- base

| \- package

| |- Employee.class

| \- Address.class

\- META-INF

\- MANIFEST.MF

您现在可以删除bin目录及其所有内容,因为我们需要的所有文件都存储在存档中,并证明模式实际上是从Jar存档中的文件生成的.

在最终完成所有准备工作后,可以解决实际问题 – 如何从位于该test.jar存档中的.class文件生成模式:

只需运行以下命令:schemagen -cp test.jar base.package.Employee,它应生成类似于以下代码段的架构定义:

希望这很简单,可以遵循

编辑:似乎jaxb2-maven-plugin以及ant-task根本不能使用类文件,所以最简单和最简单的解决方案可能是提供一个脚本文件(Windows上的.bat ;. sh on * nix / Mac)你只需手动调用命令:

由于我目前在Windows 7上运行,自动生成模式到项目的schemas子目录中的脚本如下所示:

schemagen -cp path/to/jar/*.jar -d ./schemas/ package.ClassName

然后,您可以使用绑定到generate-sources阶段的maven exec-plugin简单地调用该脚本(我已将其放置在项目的scripts子目录中):

exec-maven-plugin

org.codehaus.mojo

Generate schemas from class files contained in a jar

generate-sources

exec

${basedir}/scripts/generate-sources.bat

然后,应该在执行mvn generate-sources或任何后续阶段maven提供时自动生成模式.

编辑:我已经稍微修改了脚本,因为它可以处理通配符,虽然你必须指定* .jar而不是* – 但我想这应该足够好,至少这可以节省您手动输入名称包含JAXB类的Jar文件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值