Maven 多模块:组装 WAR 时出错:需要 webxml 属性

2023-12-31

我正在将单个 Eclipse Maven 管理的 webapp 项目转换为多模块 Maven 项目(这是一个用于试验 Maven 的测试项目,因此请随意提供任何类型的建议)。

单个项目 Web 应用程序没有任何错误,成功编译并在部署时正常运行,因此我从一个工作应用程序开始。

该应用程序有一个 Web 部分和一个控制台部分,这意味着有一些类带有main()当从 Eclipse 中运行时(使用 Run as -> Java Application)按预期工作的方法。这两部分都显示来自数据库的数据,直接通过 JDBC 或通过jOOQ http://www.jooq.org/.

所以,这就是我分割项目的方式:

  • core(包含其他两个部分共有的所有内容);
  • runnable(包含具有main()方法);
  • webapp(网络应用程序部分)。

在 Eclipse 中,我现在有 4 个独立的项目:

  • shaker-multi保存聚合器(和父级)POM,以及子目录中的每个模块;
  • shaker-multi-core;
  • shaker-multi-runnable;
  • shaker-multi-webapp.

在日食内部,core and webapp编译,后者可以部署到Tomcat实例中,我可以在浏览器中看到它。

问题的出现是runnable。该项目依赖于 jOOQ 类,因此必须生成相关源代码。 jOOQ 依赖项和配置位于core/pom.xml(因为它们也可能在那里使用)。

当我执行 Project -> Run As -> Maven build... ->clean generate-sources, on shaker-multi-core I get:


Non-resolvable parent POM: Failure to find sunshine.web:shaker-multi:pom:0.0.1  

这听起来很合理,因为我没有安装任何这些工件,即使在我的本地存储库中也是如此。

但是当我调用 Maven build... -> 'clean install' 时shaker-multi,它会因为找不到web.xml归档shaker-multi-webapp(尽管它正确地驻留在shaker-multi-webapp/src/main/webapp/WEB-INF/web.xml).

我应该怎么办? 我的项目配置/拆分完全错误吗? 我应该在父 POM 中添加另一个模块吗?这听起来是错误的,因为 POM 参考声明:

继承和聚合创建了一个很好的动态来通过单个高级 POM 控制构建。您经常会看到既是父项目又是聚合器的项目.

我完全迷失在这里了。

我的期望:

  • run Maven package on shaker-multi-webapp并获得可部署的war;
  • run Maven package on shaker-multi-runnable并获得可运行的命令行jar(不过,我知道,我仍然需要配置其 POM 来生成带有依赖项的 jar);
  • run Maven package on shaker-multi并获得某种bundle我可以四处走动并且包含war or the jar每个模块的。

EDIT

I added

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <configuration>
            <webXml>src/main/webapp/WEB-INF/web.xml</webXml>        
            </configuration>
        </plugin>

to shaker-multi-webappPOM,如所示这个答案 https://stackoverflow.com/a/5353693/3127111,但没有区别。


EDIT-2

我清除了整个本地存储库(按照建议here http://www.coderanch.com/t/550433/tools/Error-assembling-WAR-webxml-attribute),当我重新打开 Eclipse 时,在 Maven 控制台中我看到


[...]
05/09/14 07:58:19 CEST: [INFO] Adding source folder /shaker-multi-webapp/src/main/java
05/09/14 07:58:19 CEST: [INFO] Adding source folder /shaker-multi-webapp/src/test/java
**05/09/14 07:58:19 CEST: [ERROR] Could not read web.xml**
[...]  

有什么提示吗?它从哪里来?但我无法重现它(无需再次删除我的整个本地存储库)。


This is shaker-multi POM:

<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>sunshine.web</groupId>
    <artifactId>shaker-multi</artifactId>
    <version>0.0.1</version>
    <packaging>pom</packaging>

    <modules>
        <module>shaker-multi-core</module>
        <module>shaker-multi-runnable</module>
        <module>shaker-multi-webapp</module>
    </modules>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

This is shaker-multi-core POM:

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

    <parent>
        <groupId>sunshine.web</groupId>
        <artifactId>shaker-multi</artifactId>
        <version>0.0.1</version>
    </parent>

    <artifactId>shaker-multi-core</artifactId>
    <packaging>jar</packaging>

    <build>
        <plugins>
            <plugin><!-- jOOQ plugin--></plugin>
        </plugins>
    </build>

    <dependencies>
        <dependency><!-- jOOQ dependency --></dependency>
    </dependencies>

</project>

This is shaker-multi-webapp POM:

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

    <parent>
        <groupId>sunshine.web</groupId>
        <artifactId>shaker-multi</artifactId>
        <version>0.0.1</version>
    </parent>

    <artifactId>shaker-multi-webapp</artifactId>
    <packaging>war</packaging>

    <build>
        <plugins>
            <plugin><!-- Tomcat local -->
            </plugin>
        </plugins>
    </build>

    <dependencies>
        <dependency>
            <groupId>sunshine.web</groupId>
            <artifactId>shaker-multi-core</artifactId>
            <version>0.0.1</version>
        </dependency>


        <dependency>
            <!-- JSP & Servlet dependencies -->
        </dependency>

    </dependencies> 
</project>

我假设你的文件夹结构是这样的:

 +-- shaker-multi
         +--- pom.xml
         +--- shaker-multi-core
                     +-- pom.xml
         +--- shaker-multi-runnable
                     +-- pom.xml
         +--- shaker-multi-webapp
                     +-- pom.xml
  1. 此外,您应该检查您的项目是否在命令和NOT在 Eclipse 中。所以你应该转到项目的根目录 (摇床多文件夹)和

    mvn清理包

    这应该不会产生错误等。

  2. 我想到的一件事是为什么你使用发行版本而不是 您的项目的快照版本。所以0.0.1代替0.0.1-SNAPSHOT?

  3. 您应该改进的一件事是 maven-compiler 插件的定义 在你的父母中:

    <build>
         <plugins>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-compiler-plugin</artifactId>
                 <version>3.1</version>
                 <configuration>
                     <source>1.7</source>
                     <target>1.7</target>
                     <encoding>UTF-8</encoding>
                 </configuration>
             </plugin>
         </plugins>
     </build>

我建议这样做:

   <build>
     <pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
        </plugins>
      </pluginManagement>
    </build>
  1. 编码可以用更好的方式解决只需在您的 pom 中定义以下内容 http://maven.apache.org/general.html#encoding-warning:
<project>
  ...
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>
  ...
</project>

上面将定义许多插件的默认值,例如 maven-compiler-plugin, maven-资源-插件等

  1. 部分原因是你的结构看起来不错......我会做一个小改进 建议如果您定义模块之间的依赖关系:
  <dependencies>
        <dependency>
            <groupId>sunshine.web</groupId>
            <artifactId>shaker-multi-core</artifactId>
            <version>0.0.1</version>
        </dependency>


        <dependency>
            <!-- JSP & Servlet dependencies -->
        </dependency>

    </dependencies> 

我建议像这样定义模块间依赖关系:

  <dependencies>
        <dependency>
            <groupId>sunshine.web</groupId>
            <artifactId>shaker-multi-core</artifactId>
            <version>${project.version}</version>
        </dependency>


        <dependency>
            <!-- JSP & Servlet dependencies -->
        </dependency>

    </dependencies> 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Maven 多模块:组装 WAR 时出错:需要 webxml 属性 的相关文章

随机推荐

  • 如何让android应用程序始终保持登录状态?

    现在我正在尝试创建一个 Android 应用程序 假设它将是某种 X 概念 所以我正在创建一个登录屏幕 我想做的是 如果我在手机上登录该应用程序 那么每当我尝试访问该应用程序时 它应该始终登录 例如我们手机中的 Facebook G mai
  • 返回前正确,返回后错误

    我已经在谷歌上搜索了几个小时 但没有运气 我正在使用标准c 调用一个非常简单的方法 并返回正确的值 但返回后的值完全错误 call declare the gross and ficaTax variables double gross d
  • 未生成资源文件代码

    我有我的默认资源文件Resources resxVisual Studio 很好地生成了一个designer cs类 但是当我尝试创建Resources de DE resx 它不会生成 我检查了两个文件的所有属性是否相同 它确实生成Res
  • 在 Macintosh 上安装 OpenCV

    我一直在关注这个教程 http blogs wcode org 2014 10 howto install build and use opencv macosx 10 10 http blogs wcode org 2014 10 how
  • PHP 服务器返回的 JSON 数据为空

    我很难弄清楚这个问题 似乎无论我尝试什么 PHP 总是最终返回一个空数组 这是我的主文件 index php 的代码
  • 从 Web 应用程序打印到客户端打印机

    如果我有一台打印机直接连接到 PC 带有打印机的信息亭 我将如何创建网页 net Web 应用程序 将 jpg 打印到信息亭打印机的功能 而无需用户干预 除了单击页面上的按钮 这个问题已经被问过好几次了 结果总是你can t通过普通的网络技
  • Ionic 2 / 3 / 4:如何将标题中的按钮与标题右侧对齐

    如何与右侧对齐 按钮显示在标题左侧 没有撰写图标 这是我正在做的事情
  • Nginx 位置匹配中的变量捕获

    假设我有一个像这样的 URL www example com a b sth 我在 Nginx 配置中编写了一个位置块 location a b
  • C# 中的 3D 数学有什么好的库吗? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在编写一个工具 它将用于处理一堆 3D 数据 执行诸如旋转对象 平移 缩放和所有这些好东西之类的操
  • 如何向用户询问文件名?

    搜索 FileDialog 的调用 我想向用户询问 Pharo 4 0 中的文件名 通过观察员我找到了班级 FileDialogWindow 用一种方法 answerFileName 寻找 answerFileName 的发件人 我去上课
  • Google Maps API:缩放时 SVG 标记相对于地图移动

    我在地图上创建了两个标记 一个是标准标记 另一个使用 SVG 路径 当我缩小时 标准标记不会相对于地图移动 但 SVG 标记会相对移动 这是一个小提琴 你可以明白我的意思 http jsfiddle net 9A4ET http jsfid
  • 如何使用 Spray Routing 测试自定义 Json 对象

    我正在 mongodb 之上创建一个带有 Spray routing 的 Rest API 以进行一些 CRUD 操作 这一切都工作正常 预计每当我尝试使用 specs2 测试它时 以下规格 class RestServiceSpec ex
  • 使用 MapView 抛出 ClassNotFoundException

    我正在努力寻找这段代码锁定的原因 据我所知 我在清单文件中声明了正确的权限 如下所示 我尝试在实际设备 Droid x w 2 3 3 和 AVD 上运行它 但没有成功 我还附加了 logcat 这使我遇到了 classnotfound 异
  • 如何验证x509证书的签名?

    我有两个 X509Certificate 对象 x1 和 x2 我想验证 x2 是否由 x1 签名 我认为这是通过 x1 的公钥和 x2 的签名来完成的 具体如何做到这一点 我还想知道将 x2 的发行者与 x1 的主题进行逐字节比较并在不同
  • 使用node js按名称过滤

    有什么方法可以过滤具有给定扩展名的文件 然后进一步过滤它们 例如 我有 txt扩展 我想得到我所有的 txt来自数组 file animal bio txt xray pdf fish bio txt mammal doc txt huma
  • PHP DateTime::createFromFormat 不起作用

    DateTime createFromFormat似乎无法正常工作 有谁知道原因和 或如何修复它 鉴于此代码 var dump DateTime createFromFormat m 02 gt format m var dump Date
  • 我什么时候可以安全地使用 HTML5 中的新
    元素?

    12 月 16 日 HTML5 扩展规范
  • Java 记录器控制台流重复输出

    我希望这个问题有一个简单的答案 我正在尝试将记录器添加到我的 Java 应用程序中 我能够完美地格式化日志文件 但在尝试将 ConsoleHandler 添加到记录器以格式化控制台输出时遇到了问题 添加 ConsoleHandler 后 每
  • 为什么所有指向结构的指针必须具有相同的大小?

    C 标准规定 指向 void 的指针应具有相同的表示和对齐方式 要求作为指向字符类型的指针 同样 指针 兼容类型的合格或不合格版本应具有 相同的表示和对齐要求 所有指针指向 结构类型应具有相同的表示和对齐方式 要求彼此一致 所有指向联合类型
  • Maven 多模块:组装 WAR 时出错:需要 webxml 属性

    我正在将单个 Eclipse Maven 管理的 webapp 项目转换为多模块 Maven 项目 这是一个用于试验 Maven 的测试项目 因此请随意提供任何类型的建议 单个项目 Web 应用程序没有任何错误 成功编译并在部署时正常运行