我们正在使用maven构建一个包含WAR的EAR,JARS在EAR的根目录和WAR的lib文件夹中都是重复的,我读到了关于从WAR中删除jar的瘦小的jar,但是我不希望这样我想把WAR作为独立的单位,
有没有办法以相反的方式执行它并从EAR的根文件夹中删除JAR?
附件是EAR POM
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-ear-plugin</artifactId>
<version>2.6</version>
<configuration>
<modules>
<webModule>
<groupId>com.csv.xyz</groupId>
<artifactId>web</artifactId>
</webModule>
</modules>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>com.csv.xyz</groupId>
<artifactId>web</artifactId>
<version>0.0.1-SNAPSHOT</version>
<type>war</type>
<scope>compile</scope>
</dependency>
</dependencies>
答案 0 :(得分:2)
“maven-skinny-war”解决方案在你的情况下没有任何缺点。另请看这个问题和我的答案:How to make maven place all jars common to wars inside the same EAR to EAR root?
通过这个解决方案,您将首先获得与自己的依赖关系打包的WAR,然后使用瘦的WAR打包EAR模块。所以一切都可以自行部署,没有任何重复。
答案 1 :(得分:1)
由于类加载器架构,我认为这不是一个好主意。如果JAR是WAR的一部分,它由Web应用程序类加载器定义,这可能导致多个实例。如果它是EAR的一部分,它由企业应用程序类加载器定义,这是一个不同的类加载器。
答案 2 :(得分:0)
要从EAR lib文件夹中删除依赖项,请声明EAR pom中提供的依赖项,例如删除commons-lang:
<dependencies>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
<scope>provided</scope>
</dependency>
</dependencies>
确保您拥有不需要依赖项的EJB模块!此外,webModules对EAR的根lib文件夹没有贡献,你有更多的依赖吗?