首页 > 解决方案 > maven install 如何安装和部署 *ONLY* ejb-client

问题描述

我正在使用maven-ejb-plugin以标准方式为我的客户端生成 ejb 客户端

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-ejb-plugin</artifactId>
    <version>2.3</version>
    <configuration>
        <ejbVersion>3.0</ejbVersion>
        <generateClient>true</generateClient>
    </configuration>
</plugin>

所以客户端使用它的依赖

<dependency>
    <groupId>en.foo.ejb</groupId>
    <artifactId>artifact-ejb</artifactId>
    <version>1.0.0</version>
    <type>ejb-client</type>         
</dependency>

到目前为止,我有 2 个问题:

  1. 启动mvn clean installmvn clean deploy安装整个 ejb 包 jar,所以最后我将同时拥有
    • 工件-ejb.jar
    • 工件-ejb-client.jar

我希望只安装第二个,因为 artifact-ejb.jar 不应该安装在存储库中

  1. ejb 工件包含一个父 pom,因此当客户端尝试解决所有依赖项时,它说在存储库中找不到父 pom,但是它的父级并不意味着分发,因为它只是一个参考。

(另见https://howtodoinjava.com/maven/maven-parent-child-pom-example/

我该如何解决这些问题?

标签: javamavenejb

解决方案


artifact-ejb-client.jar仅包含接口。在运行时,您还需要有实现。所以如果你想建立一个适当的耳朵或战争,你需要两个artifact-ejb-client.jarartifact-ejb.jar。我想到的唯一例外是 RMI 通信,您可以只使用客户端(在调用方)。所以考虑一下你是否真的想把它artifact-ejb.jar排除在你的存储库之外。

如果您决定这样做,请将您的项目拆分为两个单独的项目,一个包含接口,一个包含实现。impl-project 需要 client-project 作为依赖项。然后,您可以自由地构建和部署两者中的一个。

对于父 pom:您的工件的所有父 pom 都需要在存储库中,否则构建将中断。如果你依赖于一个工件,你需要解析它的父 pom。它不能保持“秘密”。


推荐阅读