在使用Maven构建EAR文件时,如何使“skinnyWar”选项工作?

xqnpmsa8  于 2023-08-03  发布在  Maven
关注(0)|答案(1)|浏览(118)

我使用的是Maven 3.3.9。我正在创建一个EAR项目,并在POM中指定了这个项目。

<packaging>ear</packaging>

字符串
我想使用“skinnyWars”选项,通过这个选项,打包在我的EAR中的WAR文件引用EAR中的一组库,而不是每个库都有自己的JAR副本。例如,在我的依赖项部分中,我有这样的东西

<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”配置不工作,我需要做什么调整,以便它会?

vh0rcniy

vh0rcniy1#

你应该像这样更改你的配置:

<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>

字符串

相关问题