使用 Maven 构建 EAR 文件时如何使 "skinnyWar" 选项起作用?
How do I make the "skinnyWar" option work when building an EAR file using Maven?
我正在使用 Maven 3.3.9。我正在创建一个 EAR 项目并在我的 POM 中指定了它 ...
<packaging>ear</packaging>
我想使用 "skinnyWars" 选项,因此打包在我的 EAR 中的 WAR 文件引用了 EAR 中的一组库,而不是每个库都有自己的副本罐。因此,例如,在我的依赖项部分,我有类似
的内容
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${version.mysql}</version>
</dependency>
我设置了以下 maven-ear-plugin 配置
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<artifactId>maven-ear-plugin</artifactId>
<version>2.10.1</version>
<configuration>
<finalName>${project.artifactId}</finalName>
<version>5</version>
<generatedDescriptorLocation>${basedir}/src/main/application/META-INF</generatedDescriptorLocation>
<configuration>
<defaultLibBundleDir>lib/</defaultLibBundleDir>
<skinnyWars>true</skinnyWars>
</configuration>
<modules>
<webModule>
<groupId>org.mainco.subco</groupId>
<artifactId>moduleA</artifactId>
<uri>moduleA.war</uri>
<bundleFileName>moduleA.war</bundleFileName>
<contextRoot>/moduleA</contextRoot>
</webModule>
<webModule>
<groupId>org.mainco.subco</groupId>
<artifactId>moduleC</artifactId>
<uri>moduleC.war</uri>
<bundleFileName>moduleC.war</bundleFileName>
<contextRoot>/moduleC</contextRoot>
</webModule>
<webModule>
<groupId>org.mainco.subco</groupId>
<artifactId>moduleB</artifactId>
<uri>moduleB.war</uri>
<bundleFileName>moduleB.war</bundleFileName>
<contextRoot>/moduleB</contextRoot>
</webModule>
<webModule>
<groupId>org.mainco.subco</groupId>
<artifactId>moduleD</artifactId>
<uri>moduleD.war</uri>
<bundleFileName>moduleD.war</bundleFileName>
<contextRoot>/moduleD</contextRoot>
</webModule>
</modules>
</configuration>
</plugin>
但是当我运行
mvn clean install
虽然我在输出中看到类似
的行
[INFO] Copying artifact [jar:mysql:mysql-connector-java:5.1.22] to [mysql-connector-java-5.1.22.jar]
共享 JAR 文件 "mysql-connector-java-5.1.22.jar" 位于 EAR 的根目录中,而不是在我的配置中指定的 "lib" 目录中。事实上,根本没有创建 "lib" 目录。更糟糕的是,打包在 EAR 中的 WAR 文件仍然包含我希望它们共享的库的它们自己的副本。为什么我当前的 "skinnyWar" 配置无法正常工作?我需要进行哪些调整才能正常工作?
您应该像这样更改您的配置:
<plugin>
<artifactId>maven-ear-plugin</artifactId>
<version>2.10.1</version>
<configuration>
<finalName>${project.artifactId}</finalName>
<version>5</version>
<generatedDescriptorLocation>${basedir}/src/main/application/META-INF</generatedDescriptorLocation>
<defaultLibBundleDir>lib/</defaultLibBundleDir>
<skinnyWars>true</skinnyWars>
<modules>
<webModule>
<groupId>org.mainco.subco</groupId>
<artifactId>moduleA</artifactId>
<uri>moduleA.war</uri>
<bundleFileName>moduleA.war</bundleFileName>
<contextRoot>/moduleA</contextRoot>
</webModule>
<webModule>
<groupId>org.mainco.subco</groupId>
<artifactId>moduleC</artifactId>
<uri>moduleC.war</uri>
<bundleFileName>moduleC.war</bundleFileName>
<contextRoot>/moduleC</contextRoot>
</webModule>
<webModule>
<groupId>org.mainco.subco</groupId>
<artifactId>moduleB</artifactId>
<uri>moduleB.war</uri>
<bundleFileName>moduleB.war</bundleFileName>
<contextRoot>/moduleB</contextRoot>
</webModule>
<webModule>
<groupId>org.mainco.subco</groupId>
<artifactId>moduleD</artifactId>
<uri>moduleD.war</uri>
<bundleFileName>moduleD.war</bundleFileName>
<contextRoot>/moduleD</contextRoot>
</webModule>
</modules>
</configuration>
</plugin>
我正在使用 Maven 3.3.9。我正在创建一个 EAR 项目并在我的 POM 中指定了它 ...
<packaging>ear</packaging>
我想使用 "skinnyWars" 选项,因此打包在我的 EAR 中的 WAR 文件引用了 EAR 中的一组库,而不是每个库都有自己的副本罐。因此,例如,在我的依赖项部分,我有类似
的内容 <dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${version.mysql}</version>
</dependency>
我设置了以下 maven-ear-plugin 配置
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<artifactId>maven-ear-plugin</artifactId>
<version>2.10.1</version>
<configuration>
<finalName>${project.artifactId}</finalName>
<version>5</version>
<generatedDescriptorLocation>${basedir}/src/main/application/META-INF</generatedDescriptorLocation>
<configuration>
<defaultLibBundleDir>lib/</defaultLibBundleDir>
<skinnyWars>true</skinnyWars>
</configuration>
<modules>
<webModule>
<groupId>org.mainco.subco</groupId>
<artifactId>moduleA</artifactId>
<uri>moduleA.war</uri>
<bundleFileName>moduleA.war</bundleFileName>
<contextRoot>/moduleA</contextRoot>
</webModule>
<webModule>
<groupId>org.mainco.subco</groupId>
<artifactId>moduleC</artifactId>
<uri>moduleC.war</uri>
<bundleFileName>moduleC.war</bundleFileName>
<contextRoot>/moduleC</contextRoot>
</webModule>
<webModule>
<groupId>org.mainco.subco</groupId>
<artifactId>moduleB</artifactId>
<uri>moduleB.war</uri>
<bundleFileName>moduleB.war</bundleFileName>
<contextRoot>/moduleB</contextRoot>
</webModule>
<webModule>
<groupId>org.mainco.subco</groupId>
<artifactId>moduleD</artifactId>
<uri>moduleD.war</uri>
<bundleFileName>moduleD.war</bundleFileName>
<contextRoot>/moduleD</contextRoot>
</webModule>
</modules>
</configuration>
</plugin>
但是当我运行
mvn clean install
虽然我在输出中看到类似
的行[INFO] Copying artifact [jar:mysql:mysql-connector-java:5.1.22] to [mysql-connector-java-5.1.22.jar]
共享 JAR 文件 "mysql-connector-java-5.1.22.jar" 位于 EAR 的根目录中,而不是在我的配置中指定的 "lib" 目录中。事实上,根本没有创建 "lib" 目录。更糟糕的是,打包在 EAR 中的 WAR 文件仍然包含我希望它们共享的库的它们自己的副本。为什么我当前的 "skinnyWar" 配置无法正常工作?我需要进行哪些调整才能正常工作?
您应该像这样更改您的配置:
<plugin>
<artifactId>maven-ear-plugin</artifactId>
<version>2.10.1</version>
<configuration>
<finalName>${project.artifactId}</finalName>
<version>5</version>
<generatedDescriptorLocation>${basedir}/src/main/application/META-INF</generatedDescriptorLocation>
<defaultLibBundleDir>lib/</defaultLibBundleDir>
<skinnyWars>true</skinnyWars>
<modules>
<webModule>
<groupId>org.mainco.subco</groupId>
<artifactId>moduleA</artifactId>
<uri>moduleA.war</uri>
<bundleFileName>moduleA.war</bundleFileName>
<contextRoot>/moduleA</contextRoot>
</webModule>
<webModule>
<groupId>org.mainco.subco</groupId>
<artifactId>moduleC</artifactId>
<uri>moduleC.war</uri>
<bundleFileName>moduleC.war</bundleFileName>
<contextRoot>/moduleC</contextRoot>
</webModule>
<webModule>
<groupId>org.mainco.subco</groupId>
<artifactId>moduleB</artifactId>
<uri>moduleB.war</uri>
<bundleFileName>moduleB.war</bundleFileName>
<contextRoot>/moduleB</contextRoot>
</webModule>
<webModule>
<groupId>org.mainco.subco</groupId>
<artifactId>moduleD</artifactId>
<uri>moduleD.war</uri>
<bundleFileName>moduleD.war</bundleFileName>
<contextRoot>/moduleD</contextRoot>
</webModule>
</modules>
</configuration>
</plugin>