gpt4 book ai didi

java - 如何在maven程序集中包含rmic包jar

转载 作者:行者123 更新时间:2023-12-01 05:15:36 25 4
gpt4 key购买 nike

我有一个多模块 Maven 项目,必须使用它生成 RMI stub (以与无法使用动态代理的遗留产品集成)。我已经配置了 rmic-maven-plugin 在编译阶段执行 rmic,并在打包阶段打包 stub 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?我尝试添加 <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>

注意:我已阅读 related question但创建一个 Stub 项目似乎是不可能的,因为从中生成 stub 的 RMI 服务器类显然需要成为主应用程序 jar 的一部分,而不是 Stub jar 的一部分,所以我不知道如何 rmic RMI 服务器在一个模块中,但在另一个模块中 javac 它。

最佳答案

通过从使用 moduleSets 切换到使用 fileSets 和 dependencySets 的组合,我自己解决了这个问题。文件集将程序集根目录的主 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>

关于java - 如何在maven程序集中包含rmic包jar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11270657/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com