7

これが私が達成したいことの小さな例です:

Maven Artifact Aは多くのWebサービスの1つであり、要求と応答の定義を使用してXSDスキーマを定義します。(src / main / resources / xsd)

アーティファクトAはアーティファクトBに依存しており、これは単純なJARプロジェクトであり、低レベルのタイプ記述を持つ多数のマスターXSDが含まれています。(src / main / resources / xsd)

アーティファクトAのXSDは、アーティファクトBで一度指定されたタイプ定義(インクルード)を使用します。

可能であれば、Maven依存関係としてロードされるjarにあるxsdファイルを含める方法と、NetbeansやEclipseなどのIDEでWebサービスxsd(およびwsdl)を解決する方法を知りたいと思います。

このアプローチがエキゾチックに見える場合-すっきりとしたデザインのためのより良い方法はありますか?

アップデート

最初に、スキーマインクルードが機能することを期待する簡単な例を示します。

Artifact A (WAR Module)
POM:
...
<artifactId>A</artifactId>
...
<dependency>
  <artifactId>B</artifactId>
  ...
</dependency>

Schema:
....
<xs:include schemaLocation="classpath://net/elfwyn/xsd/schema.xsd"/>
....

Artifact B (JAR Module)

Schema Location:
src/main/resources/net/elfwyn/xsd/schema.xsd

このような問題にはいくつかの解決策があるようですが、自分の環境にそれらを実装する方法がわかりません。

(netbeans7.1)IDE(dev environemnt用)に埋め込まれ、Mavenプラグイン(本番環境用)として利用可能なカタログリゾルバーを知っています。これにより、スキーマファイルの場所にエイリアスを指定できるはずです。このエイリアスは、スキーマの場所として使用する必要があります。

ただし、JARファイル内のスキーマにアクセスするCatalog.xmlを指定する方法がわかりません。私には、スキーマの場所で直接指定するのと同じ問題のようです。また、各WARのカタログを維持するためのオーバーヘッドがあります。これは、可能な限り採用したくないプロジェクトです。

Mavenプラグインに関しては、まだ決定的なものは何も見つかりませんでした。

他のソースはjax-bのコンテキストでカスタムカタログリゾルバーを実装していますが、Java-WS環境でそのようなリゾルバーを実装するための可能なフックと、上記のmaven-pluginと組み合わせてどのように機能するかはまだわかりません。またはIDEカタログリゾルバ...

4

1 に答える 1

6

あなたの質問は合理的だと思います。過去に、依存するJARにあるファイルに対して特別な処理を行う必要があるMavenモジュールがあることに気づきました。

私が過去に行ったことは、ArtifactBをArtifactAの依存関係にすることです。次に、Artifact AIのpom.xmlで、次のようにMaven依存関係プラグインの特別な構成を使用します。

<plugin>
    <!-- Used to pull XSD files from the JAR -->
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <executions>
          <execution>
              <id>unpack-xsd-files</id>
              <!-- Using the initialize phase because it is before the generate sources phase -->
              <phase>initialize</phase>
                   <goals>
                       <goal>unpack</goal>
                   </goals>
                   <configuration>
                        <artifactItems>
                            <artifactItem>
                                <!-- Artifact that Holds our custom templates -->
                                <groupId>com.mycorp</groupId>
                                <artifactId>artifact-b</artifactId>
                                <version>${artifact-b.version}</version>
                                <type>jar</type>
                            </artifactItem>
                         </artifactItems>
                         <includes>**/*.xsd</includes>
                         <outputDirectory>${project.basedir}/target/xsd-includes</outputDirectory>
                   </configuration>
            </execution>
    </executions>
</plugin>

これで、対象のXSDファイルがArtifact Aのターゲットディレクトリにあり、そこから好きなことを行うことができます。それらをリソースとして含めたり、他のXSDファイルから参照したり、独自のJARに埋め込んだりすることができます。構成からわかるように、ターゲットディレクトリに配置する必要もありません。それらをディレクトリに直接配置できます/src/main/resources

この構成を任意のMavenモジュールに追加して、複数のモジュールがすべて同じように機能できるようにすることができます。このアプローチの良いところは、M2Eclipseを介してEclipseでも機能することです。

于 2012-02-10T03:40:25.993 に答える