1. ホーム
  2. maven-2

[解決済み] 複数のスキーマパッケージを生成するようにjaxb / Mavenに指示するにはどうすればよいですか?

2023-03-28 08:54:34

質問

</plugin>       
       <plugin>
           <groupId>org.jvnet.jaxb2.maven2</groupId>
           <artifactId>maven-jaxb2-plugin</artifactId>
           <version>0.7.1</version>
           <executions>
             <execution>
               <goals>
                 <goal>generate</goal>
               </goals>
             </execution>
           </executions>
            <configuration>
             <schemaDirectory>src/main/resources/dir1</schemaDirectory>
              <schemaIncludes>
                  <include>schema1.xsd</include>
              </schemaIncludes>
              <generatePackage>schema1.package</generatePackage>
           </configuration>
         </plugin>
          <plugin>
           <groupId>org.jvnet.jaxb2.maven2</groupId>
           <artifactId>maven-jaxb2-plugin</artifactId>
           <version>0.7.1</version>
           <executions>
             <execution>
               <goals>
                 <goal>generate</goal>
               </goals>
             </execution>
           </executions>
            <configuration>
             <schemaDirectory>src/main/resources/dir2</schemaDirectory>
              <schemaIncludes>
                  <include>schema2.xsd</include>
              </schemaIncludes>
              <generatePackage>schema2.package</generatePackage>
           </configuration>
         </plugin>
       </plugins>

何が起きたのか。 Mavenは、最初のプラグインを実行します。その後、ターゲットフォルダを削除し、2つ目のパッケージを作成し、表示されるようにします。

最初の設定にtarget/somedir1、2番目の設定にtarget/somedir2を設定しようとしました。でも、行動は変わらない?何かアイデアはありますか?私は、src/main/java フォルダーに直接パッケージを生成したくありません。なぜなら、これらのパッケージは生成されたものであり、手動で作成したクラスと混在してはならないからです。

どのように解決するのですか?

異なる指定をする必要がありました。 generateDirectory (これがなければ、プラグインはファイルが最新であるとみなし、2回目の実行時には何も生成していませんでした)。に従うことをお勧めします。 target/generated-sources/<tool> という規約を設け、生成されたソースが自動的にお気に入りのIDEにインポートされるようにしました。また、いくつか宣言することをお勧めします。 execution プラグインを2回宣言する代わりに(そして configuration 内各 execution 要素)を含む。

<plugin>
  <groupId>org.jvnet.jaxb2.maven2</groupId>
  <artifactId>maven-jaxb2-plugin</artifactId>
  <version>0.7.1</version>
  <executions>
    <execution>
      <id>schema1-generate</id>
      <goals>
        <goal>generate</goal>
      </goals>
      <configuration>
        <schemaDirectory>src/main/resources/dir1</schemaDirectory>
        <schemaIncludes>
          <include>shiporder.xsd</include>
        </schemaIncludes>
        <generatePackage>com.stackoverflow.package1</generatePackage>
        <generateDirectory>${project.build.directory}/generated-sources/xjc1</generateDirectory>
      </configuration>
    </execution>
    <execution>
      <id>schema2-generate</id>
      <goals>
        <goal>generate</goal>
      </goals>
      <configuration>
        <schemaDirectory>src/main/resources/dir2</schemaDirectory>
        <schemaIncludes>
          <include>books.xsd</include>
        </schemaIncludes>
        <generatePackage>com.stackoverflow.package2</generatePackage>
        <generateDirectory>${project.build.directory}/generated-sources/xjc2</generateDirectory>
      </configuration>
    </execution>
  </executions>
</plugin>

この設定だと、aの後に以下のような結果が得られます。 mvn clean compile

$ ツリーターゲット/
ターゲット/
├─ クラス
│ ├─コム
│ │ └─ スタックオーバーフロー
│ │ ├─ App.class
│ │ ├─ パッケージ1
│ │ ├─ ObjectFactory.class
│ │ ├── Shiporder.class
│ │ ├─ Shiporder$Item.class
│ │ └─ Shiporder$Shipto.class
│ │ └── パッケージ2
│ │ ├─ BookForm.class
│ │ ├─ BooksForm.class
│ │ ├─ ObjectFactory.class
│ │ └─ package-info.class
│ ├─ dir1
│ └─ shiporder.xsd
│ └────────────────────────┘ DIR2
│ └─ books.xsd
生成されたソース └── Generated-Sources
    ├─ xjc
    │ └─META-INF
    └── Sun-jaxb.episode
    ├─ xjc1
    │ └────────────────────────┘コム
    │ └─ スタックオーバーフロー
    │ └── パッケージ1
    │ ├─ ObjectFactory.java
    │ └─ Shiporder.java
    └─ xjc2
        └── コム
            └─ スタックオーバーフロー
                └── パッケージ2
                    ├─ BookForm.java
                    ├─ BooksForm.java
                    ├─ ObjectFactory.java
                    └─────────────────────────┘ Package-info.java

というのが、予想される結果のようです。