【问题标题】:Maven: change WAR structureMaven:改变 WAR 结构
【发布时间】:2018-02-28 14:47:19
【问题描述】:

我有一个要导出为 WAR 文件的 maven 项目。 WAR 结构如下所示:

Project_Name.war
            |
            |__ META_INF
            |
            |__ WEB_INF_
                        |
                        |__ lib
                        |
                        |__ classes_
                                    |
                                    |__ project_package(project src code)
                                    |
                                    |__ META_INF
                                    |
                                    |__ WEB_INF_
                                    |           |
                                    |           |__ web.xml
                                    |__ project config files

如您所见,我的项目 src 代码位于 classes 目录中。而不是这个,我想将我的项目 src 代码作为 JAR 文件包含在我的 lib 文件夹中。 web.xml 也在 classes 文件夹中。我想把它放在classes 文件夹之外,即WEB_INF 以及lib 和“类”。

我总是可以手动完成这两项操作。

我预期的 WAR 结构是这样的:

Project_Name.war
            |
            |__ META_INF
            |
            |__ WEB_INF_
                        |
                        |__ lib_
                        |       |__ Project.jar
                        |
                        |__ classes_
                        |           |
                        |__ web.xml |
                                    |__ project config files

但我想知道这是否可以通过项目的pom.xml 来完成?我会感谢那里的专家退伍军人的一些帮助。谢谢。

我正在使用maven_war_pluginmvn install 命令来构建WAR。

包括pom.xml结构:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>PROJECT_A</groupId>
    <artifactId>PROJECT_A</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>
    <dependencies>
        .
        .
        .
        .
    </dependencies>
    <build>
        <sourceDirectory>src</sourceDirectory>
        <resources>
            <resource>
                <directory>src</directory>
                <excludes>
                    <exclude>**/*.java</exclude>
                </excludes>
            </resource>
            <resource>
                <directory>config</directory>
                <excludes>
                    <exclude>**/*.java</exclude>
                </excludes>
            </resource>
        </resources>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.5.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.6</version>
                <configuration>
                    <warSourceDirectory>WebContent</warSourceDirectory>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                </configuration>
            </plugin>
        </plugins>
    </build>
    <repositories>
        .
        .
        .
    </repositories>
    <pluginRepositories>
        .
        .
    </pluginRepositories>
</project>

【问题讨论】:

  • 也许您应该包含 POM 以及您用于构建的命令。在 classes 文件夹中看到源文件很奇怪。
  • @TimBiegeleisen:用于建立战争的命令是mvn clean install。给我一点时间来介绍 pom 的结构
  • 首先你为什么要改变Maven中的约定?你想解决什么样的问题?保持约定优于配置范式...它使您的生活更轻松...并且您的 war 文件的结构看起来错误...

标签: java maven


【解决方案1】:

如何在我的 webapp 中创建一个包含类的 JAR?

      <plugin>
        <artifactId>maven-war-plugin</artifactId>
        <version>3.2.0</version>
        <configuration>
          <archiveClasses>true</archiveClasses>
        </configuration>
      </plugin>

https://maven.apache.org/plugins/maven-war-plugin/faq.html#attached

您使用 webXml 属性扫描指定 web.xml 位置:https://maven.apache.org/plugins/maven-war-plugin/war-mojo.html#webXml

此外,我建议关注 https://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html 而不是 WebContent。

【讨论】:

  • 虽然这似乎是正确的答案,但看起来这个答案是从this stackoverflow post 复制而来的。 @Dennis Kieselhorst,如果您能引用他们的答案而不是复制它,人们会非常感激。
  • 我从 maven.apache.org 复制了它,链接是答案的一部分。
猜你喜欢
  • 1970-01-01
  • 2023-03-10
  • 1970-01-01
  • 2020-09-18
  • 2017-10-13
  • 1970-01-01
  • 1970-01-01
  • 2013-02-03
  • 2019-05-06
相关资源
最近更新 更多