使用 Maven 构建 EAR 文件时,如何使"skinnyWar"选项起作用?



我正在使用Maven 3.3.9。我正在创建一个耳朵项目,并在我的POM中指定了这一点...

    <packaging>ear</packaging>

我想使用" Skinnywars"选项,在我的耳朵中包装的战争文件参考了耳朵内部的一组库,而不是每个库都有自己的罐子的副本。因此,例如,在我的依赖项部分中,我有

之类的东西
    <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"是耳朵的根,而不是我的配置中指定的" lib"目录。实际上,根本没有创建" LIB"目录。更糟糕的是,包装在耳朵内的战争档案仍然包含我自己希望分享的库的副本。为什么我目前的" 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>

最新更新