1

マルチモジュールのMavenプロジェクトがあり、RMIスタブを生成する必要があります(動的プロキシを使用できないレガシー製品と統合するため)。コンパイルフェーズでrmicを実行し、パッケージフェーズでスタブjarをパッケージ化するようにrmic-maven-pluginを構成しました。

<execution>
        <id>rmic-process-classes</id>
        <goals>
          <goal>rmic</goal>
        </goals>
        <phase>compile</phase>
        <configuration>
          <keep>true</keep>
          <!--outputDirectory>${project.build.outputDirectory}</outputDirectory-->
          <includes>
            <include>com.MyImpl</include>
          </includes>
        </configuration>
      </execution>
      <execution>
        <id>rmic-package</id>
        <goals>
          <goal>package</goal>
        </goals>
        <configuration>
          <!--outputDirectory>${project.build.outputDirectory}</outputDirectory>
          <finalName>broker-dl</finalName>
          <classifier>${project.version}</classifier-->
        </configuration>
      </execution>

配布アーカイブを作成するために存在する親の子モジュールである'-dist'モジュールでアセンブリが作成された後、問題が発生します。rmic-packageの実行によって生成されたクライアントjarは含まれません。

rmicプラグインがパッケージフェーズで生成するjarを含めるようにアセンブリプラグインを構成するにはどうすればよいですか?<files.の後にセクションを追加しようとしました<moduleSets>が、filesセクションが存在する場合、moduleSetセクションが存在しないかのように、それらのファイルのみがアセンブリに残ります。

      <moduleSets>
      <moduleSet>
          <useAllReactorProjects>true</useAllReactorProjects>
          <includes>
              <include>com:ImplModule</include>
           </includes>
          <binaries>
              <unpack>false</unpack>
              <fileMode>644</fileMode>
              <directoryMode>755</directoryMode>
              <dependencySets>
                <dependencySet>
                  <outputDirectory>lib</outputDirectory>
                </dependencySet>
              </dependencySets>
          </binaries>
      </moduleSet>     
   </moduleSets>
   <files>
       <file>           
           <outputDirectory>lib</outputDirectory>
           <source>../ImplModule/target/ImplModule-${project.version}-client.jar</source>
           <fileMode>644</fileMode>
       </file>       
   </files>

注:関連する質問を読みましたが、スタブが生成されるRMIサーバークラスは明らかにスタブj​​arの一部ではなく、メインアプリケーションjarの一部である必要があるため、スタブプロジェクトを作成することは不可能のようです。あるモジュールでRMIサーバーをrmicし、別のモジュールでjavacする方法を確認してください。

4

1 に答える 1

0

moduleSets の使用から fileSets と dependencySets の組み合わせに切り替えることで、この問題を自分で解決することができました。fileSet は、アセンブリのルートのメイン jar と、rmic-package ゴールから lib ディレクトリへの rmic クライアント jar を取得します。次に、dependencySet はメイン jar のすべての依存関係を lib ディレクトリにもプルします。

<!-- Include the -dl jar created by the rmic-package goal in
        the lib part of the assembly. It is necessary because 
        the target VM does not support dynamic RMI stubs, so the 
        stubs must be deployed in the assembly. -->
   <fileSets>
       <fileSet>
           <directory>../{project}/target</directory>
           <outputDirectory>.</outputDirectory>
           <!-- put the main jar in the top level -->
           <includes>
               <include>*.jar</include>
           </includes>
           <!-- don't include the RMIC-built -dl jar at the top -->
           <excludes>
               <exclude>*-dl-*.jar</exclude>
           </excludes>
       </fileSet>
       <fileSet>
           <directory>../{project}/target</directory>
           <outputDirectory>lib</outputDirectory>
           <!-- put the RMIC-built -dl jar in the lib dir -->
           <includes>
               <include>*-dl-*.jar</include>
           </includes>
       </fileSet>
   </fileSets>
   <dependencySets>
       <dependencySet>
           <!-- put all the dependencies in lib, as usual -->
           <useProjectArtifact>false</useProjectArtifact>
           <outputDirectory>lib</outputDirectory>             
           <excludes>
               <!-- don't include the main jar, which is at 
                    the top level already. -->
               <exclude>{groupId}:{artifact}</exclude>
           </excludes>
           <unpack>false</unpack>
       </dependencySet>
   </dependencySets>
于 2012-07-06T20:32:03.523 に答える