Java maven ejb项目-包含依赖项的包

Java maven ejb项目-包含依赖项的包,java,jakarta-ee,maven,Java,Jakarta Ee,Maven,有没有办法将maven ejb项目的依赖项打包到最终的jar中 我通常使用一个单独的ear项目,并将ejb作为一个依赖项包含在内——它将以这种方式自动填充lib文件夹。然而,这似乎有点浪费——有一个项目只是为了构建ear 现在我有: <artifactId>projectname</artifactId> <version>1.0.0-SNAPSHOT</version> <packaging>ejb</packaging>

有没有办法将maven ejb项目的依赖项打包到最终的jar中

我通常使用一个单独的ear项目,并将ejb作为一个依赖项包含在内——它将以这种方式自动填充lib文件夹。然而,这似乎有点浪费——有一个项目只是为了构建ear

现在我有:

<artifactId>projectname</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>ejb</packaging>

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-ejb-plugin</artifactId>
            <version>2.3</version>
            <configuration>
                <ejbVersion>3.1</ejbVersion>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>

                        <!-- without this, the datetime stamp unique id's will be appended to classpath items -->
                        <!-- see: http://maven.apache.org/shared/maven-archiver/examples/classpath.html#Snapshot -->
                        <useUniqueVersions>false</useUniqueVersions>
                    </manifest>
                </archive>
            </configuration>
        </plugin>
projectname
1.0.0-SNAPSHOT
ejb
org.apache.maven.plugins
maven ejb插件
2.3
3.1
真的
假的
我需要将包装类型设置为ear吗?我可以在独立的ejb jar中包含可传递的依赖项吗?如果我将其设置为ear,如何配置ear插件

提前谢谢

可以将依赖项打包到JAR中。它将从项目的所有依赖项中提取类/资源,并将它们打包到最终的JAR中

这应该足以打包所有依赖项:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>1.4</version>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>
        </execution>
    </executions>
</plugin>

org.apache.maven.plugins
maven阴影插件
1.4
包裹
阴凉处
然而,这样做也有缺点

  • 不同JAR中具有相同名称的多个资源可能会导致问题(例如/META-INF/services/…)。您可以使用Shade的资源转换器,但它可能会变得混乱
  • 一旦部署,跟踪项目中哪些JAR是依赖项就不那么容易了(您必须返回POM,而不仅仅是查看EAR)
除非您有充分的理由不这样做,否则我建议您坚持构建EAR。

可以将依赖项打包到JAR中。它将从项目的所有依赖项中提取类/资源,并将它们打包到最终的JAR中

这应该足以打包所有依赖项:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>1.4</version>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>
        </execution>
    </executions>
</plugin>

org.apache.maven.plugins
maven阴影插件
1.4
包裹
阴凉处
然而,这样做也有缺点

  • 不同JAR中具有相同名称的多个资源可能会导致问题(例如/META-INF/services/…)。您可以使用Shade的资源转换器,但它可能会变得混乱
  • 一旦部署,跟踪项目中哪些JAR是依赖项就不那么容易了(您必须返回POM,而不仅仅是查看EAR)

除非你有充分的理由不这样做,否则我建议你坚持做耳朵。

我认为没有直接的方法可以做到这一点。相反,可以做的是将其创建为带有ear和ejb模块的模块项目。这并不完全是我想要的,但它很有效,而且比单独的项目要好。

我认为没有直接的方法可以做到这一点。相反,可以做的是将其创建为带有ear和ejb模块的模块项目。这并不完全是我想要的,但它可以工作,而且比单独的项目要好。

Hmm,interest+1您可以将项目设置为packaging ear,但是模块很奇怪-我想我可能必须手动创建application.xml,否则它似乎可以工作,感谢tipHmm,interest+1您可以将项目设置为packaging ear,但是这些模块很奇怪——我想我可能必须手工创建application.xml,否则它似乎可以正常工作,谢谢你的提示