maven - jibx codegen - 存储binding.xml

时间:2011-08-18 18:22:53

标签: binding maven jibx codegen

我正在使用maven使用jibx构建一个包含来自模式文件的生成代码的jar。为此,我使用了jibx-maven-plugin和schema-codegen目标。我想将生成的binding.xml文件包含在生成的maven jar中。有没有办法指导jar创建包含生成的binding.xml

目前正在使用:

<plugin>
    <groupId>org.jibx</groupId>
    <artifactId>jibx-maven-plugin</artifactId>
    <version>1.2.3</version>
    <configuration>
        <schemaLocation>src/main/jibx</schemaLocation>
        <includeSchemas>
            <includeSchema>dataoneTypes.xsd</includeSchema>
        </includeSchemas>
        <options>
            <package>org.dataone.ns.service.types.v1</package>
        </options>
    </configuration>
    <executions>
        <execution>
            <goals>
                <goal>schema-codegen</goal>
            </goals>
        </execution>

    </executions>
</plugin>

4 个答案:

答案 0 :(得分:1)

大卫,

好!虽然不需要包含binding.xml文件,但这是一种很好的做法。新的jibx-maven-plugin可以在创建基于原始模式的新绑定时使用此文件。 JiBX源代码库中有很多例子。

由于JiBX启用了OSGi,因此在创建jar文件时添加OSGi清单也是一种好习惯。这也简化了包含binding.xml文件的过程。即使你不使用OSGi,你的jar也能正常工作。以下是项目文件的外观:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.dataone.ns.service</groupId>
    <artifactId>org.dataone.ns.service.types.v1</artifactId>
    <version>0.0.1</version>
    <packaging>bundle</packaging>

    <build>
        <plugins>
            <plugin>
                <groupId>org.jibx</groupId>
                <artifactId>jibx-maven-plugin</artifactId>
                <version>1.2.3</version>

                <executions>
                    <execution>
                        <id>generate-java-code-from-schema</id>
                        <goals>
                            <goal>schema-codegen</goal>
                        </goals>
                        <configuration>
                            <schemaLocation>src/main/jibx</schemaLocation>
                            <includeSchemas>
                                <includeSchema>dataoneTypes.xsd</includeSchema>
                            </includeSchemas>
                            <options>
                                <package>org.dataone.ns.service.types.v1</package>
                            </options>
                        </configuration>
                    </execution>
                    <execution>
                        <id>compile-binding</id>
                        <goals>
                            <goal>bind</goal>
                        </goals>
                        <configuration>
                            <schemaBindingDirectory>target/generated-sources</schemaBindingDirectory>
                            <includes>
                                <include>binding.xml</include>
                            </includes>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <groupId>org.apache.felix</groupId>
                <artifactId>maven-bundle-plugin</artifactId>
                <extensions>true</extensions>
                <configuration>
                    <instructions>
                        <Include-Resource>META-INF/binding.xml=${basedir}/target/generated-sources/binding.xml</Include-Resource>
                        <Export-Package>org.dataone.ns.service.types.v1.*;version=${project.version}</Export-Package>
                    </instructions>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <dependencies>
        <dependency>
            <groupId>org.jibx</groupId>
            <artifactId>jibx-run</artifactId>
            <version>1.2.3</version>
        </dependency>
        <dependency>
            <groupId>org.jibx</groupId>
            <artifactId>jibx-extras</artifactId>
            <version>1.2.3</version>
        </dependency>
    </dependencies>

</project>

看看你的jar文件。您的类,binding.xml文件和OSGi清单条目都在那里!

唐科利 jibx-maven-plugin作者

答案 1 :(得分:0)

您始终可以使用maven-antrun-plugin将文件(集)复制到目标/类。

确保:

  • package之前将jibx插件附加到阶段 - 最好是generate-resources
  • 您将antrun执行附加到相同或更高版本,但 package之前再次 - 最好是generate-resourcesprocess-resources
  • jibx插件声明在antrun声明之前

然后你可以使用这样的东西:

...
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-antrun-plugin</artifactId>
    <version>1.6</version>
    <executions>
      <execution>
         <phase>generate-resources</phase>
         <goals>
           <goal>run</goal>
         </goals>
         <configuration>
           <tasks>
             <copy file="${project.build.directory}/PATH/TO/binding.xml" todir="${project.build.outputDirectory}/PATH/IN/JAR/"/>
           </tasks>
         </configuration>
       </execution>
     </executions>
</plugin>
...

答案 2 :(得分:0)

您可以在目标目录中创建您希望将它放在jar中的binding.xml,如下所示:

...
<goals>
     <goal>schema-codegen</goal>
</goals>
<configuration>
...
     <targetDirectory>target/resources</targetDirectory>
...
</configuration>
...

绑定代码时,您可以使用<bindingDirectory>标记

来引用此目录

答案 3 :(得分:0)

您可以使用build-helper-maven-plugin的add-resource目标来实现。

示例:

<build>
    <plugins>
        <plugin>
            <groupId>org.jibx</groupId>
            <artifactId>jibx-maven-plugin</artifactId>
            <version>1.2.3</version>
            <executions>
                <execution>
                    <id>generate-java-code-from-schema</id>
                    <phase>generate-sources</phase>
                    <goals>
                        <goal>schema-codegen</goal>
                    </goals>
                    <configuration>
                        <schemaLocation>src/main/resources</schemaLocation>
                        <includeSchemas>
                            <includeSchema>foobar.xsd</includeSchema>
                        </includeSchemas>
                    </configuration>
                </execution>
                <execution>
                    <id>compile-binding</id>
                    <phase>process-classes</phase>
                    <goals>
                        <goal>bind</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>build-helper-maven-plugin</artifactId>
            <version>1.7</version>
            <executions>
                <execution>
                    <id>add-resource</id>
                    <phase>generate-resources</phase>
                    <goals>
                        <goal>add-resource</goal>
                    </goals>
                    <configuration>
                        <resources>
                            <resource>
                                <directory>${project.build.directory}/generated-sources</directory>
                                <includes>
                                    <include>binding.xml</include>
                                </includes>
                                <targetPath>JiBX</targetPath>
                            </resource>
                        </resources>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>

您可以在jar中找到binding.xml文件:

JiBX/binding.xml