【问题标题】:Maven shade copy WEB-INFMaven 阴影复制 WEB-INF
【发布时间】:2014-06-26 22:38:51
【问题描述】:

使用 ma​​ven-shade-plugin 我正在尝试创建一个项目文件结构如下:

问题是下面的pom配置没有创建WEB-INF目录。

<plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>2.3</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <filters>
                            <filter>
                                <artifact>*:*</artifact>
                                <excludes>
                                    <exclude>META-INF/*.SF</exclude>
                                    <exclude>META-INF/*.DSA</exclude>
                                    <exclude>META-INF/*.RSA</exclude>
                                </excludes>
                            </filter>
                        </filters>
                        <createDependencyReducedPom>true</createDependencyReducedPom>
                        <transformers>
                            <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                <mainClass>com.my.package.Main</mainClass>
                            </transformer>
                        </transformers>
                    </configuration>
                </execution>
            </executions>
        </plugin>

基本上我需要将我的 web.xml 文件、类和 lib 文件复制到项目根目录下名为 WEB-INF 的目录中。

更新:抱歉,我将错误的插件从我的 pom 复制到原始问题中!

更新: 如果我从 pom 声明中添加包装:&lt;packaging&gt;war&lt;/packaging&gt; WEB-INF 文件结构按照 OQ 完成。但是,有了这个声明,com 目录现在不包含我的包,因此无法找到主类。

&lt;packaging&gt;war&lt;/packaging&gt; 的样子:

它应该是什么样子:

【问题讨论】:

  • 听起来你尝试创建一个 WAR 存档,为什么不使用 maven-war-plugin 来达到这个目的?
  • 我尝试了 maven-war-plugin。我正在尝试使用主类创建一个可执行的战争。但是,主类不能在默认包中。它必须在声明的包中。

标签: java maven maven-shade-plugin


【解决方案1】:

maven-assembly插件提供了更大的灵活性,使用汇编插件很容易实现


【讨论】:

  • 我不熟悉 maven-assembly-plugin。似乎运气不太好。
  • 它的程序集描述符非常简单,您可以在程序集中指定输入目录和输出目录,它会为您组装它,查看一些示例
【解决方案2】:

有很多可能的答案可以用 maven 达到预期的效果。但是,根据我提供的更新,我发现添加 ma​​ven-antrun-plugin 解决了我的问题:

<plugin>
            <artifactId>maven-antrun-plugin</artifactId>
            <executions>
                <execution>
                    <id>move-main-class</id>
                    <phase>compile</phase>
                    <configuration>
                        <tasks>
                            <copy todir="${project.build.directory}/${project.artifactId}">
                                <fileset dir="${project.build.directory}/classes/">
                                </fileset>
                            </copy>
                        </tasks>
                    </configuration>
                    <goals>
                        <goal>run</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

【讨论】:

    猜你喜欢
    • 2016-03-12
    • 2018-02-24
    • 1970-01-01
    • 1970-01-01
    • 2017-07-18
    • 1970-01-01
    • 1970-01-01
    • 2012-03-06
    • 2015-07-29
    相关资源
    最近更新 更多