2012-06-30 124 views
1

我有一個多模塊Maven項目,必須有它生成的RMI存根(與不能使用動態代理的舊產品集成)。我已經配置了rmic-maven-plugin在編譯階段執行rmic,並在包階段打包存根jar。如何在maven程序集中包含rmic包jar

<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?我嘗試在<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> 

注意:我讀了related question但創建一個存根項目似乎是不可能的,因爲從其產生存根的RMI服務器類顯然需要是主要的應用程序JAR的一部分,而不是部分一個Stub jar,所以我沒有看到如何在一個模塊中使用RMI服務器,而在另一個模塊中使用javac。

+0

不知道如果)我的問題是如此可怕的或無知,每個人都只是忽略了它,二)沒有人知道答案,或c)沒有人十分熟悉Maven有應對傳統RMI的應用程序。 – mwhidden

回答

0

我能夠通過從使用moduleSets切換到fileSets和dependencySets的組合來解決這個問題。 fileSets選擇程序集根目錄的主jar以及rmic-package目標的rmic客戶機jar到lib目錄。然後,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> 
+0

雖然接受的答案是4歲以上,但缺乏特定的例子。 –

+0

@GKrost感謝您的反饋。我藉此機會改進了我的答案。 – mwhidden

相關問題