Java Maven-EAR编译

Java Maven-EAR编译,java,maven,ear,Java,Maven,Ear,我有这种依赖性(以及许多其他类似的依赖性): jShrink jShrink 3.0.2 系统 ${project.basedir}/./kladr ear/lib/jShrink-3.0.2.jar 那么如何使用MAVEN while package将这个JAR添加到EAR/LIB文件夹呢?看看可用的MAVEN,我希望您将其标记为 <scope>compile</scope> 编译 并将jar文件上载到存储库(本地或远程)。Maven应该为您提供适当的命令行来执

我有这种依赖性(以及许多其他类似的依赖性):


jShrink
jShrink
3.0.2
系统
${project.basedir}/./kladr ear/lib/jShrink-3.0.2.jar

那么如何使用MAVEN while package将这个JAR添加到EAR/LIB文件夹呢?

看看可用的MAVEN,我希望您将其标记为

<scope>compile</scope>
编译
并将jar文件上载到存储库(本地或远程)。Maven应该为您提供适当的命令行来执行该上传


编辑:如下所述,此范围是默认范围,因此您可以忽略它。

进入EAR的依赖项通常应基于EJB模块所需的依赖项。如果您有一个EJB模块,其中库X位于编译范围内,那么这将触发Maven希望将库打包到EJB所属的ear中。在ear pom中根本不需要管理任何作用域

如果您没有任何EJB,只有WAR,我不会在EAR中打包库,而是简单地将它们作为WAR的一部分进行部署(因此它们最终会在WEB-INF/lib中)。保持web依赖关系良好,每个模块都包含这些依赖关系,即使这意味着您会得到重复的依赖关系


此外,compile是默认的作用域,因此您永远不需要手动声明它,除非您这样做是为了覆盖为依赖项设置的另一个作用域。

因此我找到了将jar库放入ear/lib路径的方法。我已经将它们作为
添加到
maven-ear插件中
。另外,在每个
中,我添加了
-这个jar将被复制的路径。

因此,如果我需要在另一台计算机上打包这个项目,我需要再次将这个jar上传到repo?顺便说一句,正如我注意到的,只有当它们没有任何作用域时,maven才会将jar添加到EAR/LIB文件夹中…你不需要编译,这是未指定时的默认值。将它们作为依赖项添加到POM就足够了。不,这还不够,因为具有作用域系统的依赖项将不会复制到lib目录。为什么要将与作用域“system”的依赖项与EAR一起交付?此范围的依赖项将在运行时提供。