maven - кодекс jibx - хранение binding.xml

Я использую maven для создания jar-файла, содержащего сгенерированный код из файла схемы, используя jibx. Чтобы сделать это, я использую jibx-maven-plugin с целью schema-codegen. Я хочу включить сгенерированный файл binding.xml как часть получившегося файла maven 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 ответа

Дэвид,

Хорошо! Хотя включение файла binding.xml не требуется, это хорошая практика. Новый jibx-maven-plugin может использовать этот файл позже при создании новой привязки, основанной на исходной схеме. В исходном хранилище JiBX множество примеров.

Поскольку JiBX поддерживает OSGi, рекомендуется также добавлять манифест OSGi при создании файла JAR. Это также упрощает включение файла binding.xml. Даже если вы не используете OSGi, ваша банка будет работать нормально. Вот как должен выглядеть файл вашего проекта:

<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-плагина

Вы всегда можете использовать maven-antrun-plugin, чтобы скопировать ваш файл (набор) в target / classes.

Удостоверься что:

  • вы подключаете плагин Jibx к фазе до package - лучше всего generate-resources
  • вы присоединяете выполнение antrun к тому же или позже, но снова, до package - лучше всего generate-resources или же process-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>
...

Вы можете создать свой файл binding.xml в целевом каталоге, который вы хотите разместить в банке следующим образом:

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

При связывании кода вы можете использовать ссылку на этот каталог с <bindingDirectory> тег

Вы можете сделать это, используя цель add-resource для build-helper-maven-plugin.

Пример:

<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>

Вы найдете файл binding.xml в вашем банке по адресу:

JiBX/binding.xml
Другие вопросы по тегам