Maven 无法从父 pom 部署
Posted
技术标签:
【中文标题】Maven 无法从父 pom 部署【英文标题】:Maven can't deploy from parent pom 【发布时间】:2014-07-03 23:27:37 【问题描述】:我刚刚开始使用 Maven 构建应用程序。我的一种方法是构建一个多模块 Web 应用程序。使用 Eclipse 可以很容易地构建这种应用程序。到目前为止一切正常。我失败的地方是部署。我使用 Wildfly 作为我的应用程序服务器,并且表示层的部署运行良好。但是当我想从父项目进行部署时,我收到了这条消息:
Failed to execute goal org.wildfly.plugins:wildfly-maven-plugin:1.0.1.Final:deploy (default-cli) on project build: Error executing FORCE_DEPLOY: C:\Users\*****\Desktop\workspace\mvnexbook-examples-1.0\ch-multi\target\parent-0.8-SNAPSHOT.maven-project (No such file or directory)
这很令人困惑。不是从 .m2/repository 文件夹中先前安装的文件进行部署吗?我的父文件夹中是否需要一个目标目录?
我的父 pom 文件
<?xml version="1.0" encoding="UTF-8"?>
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.sonatype.mavenbook.multi</groupId>
<artifactId>simple-parent</artifactId>
<version>0.8-SNAPSHOT</version>
</parent>
<artifactId>simple-webapp</artifactId>
<packaging>war</packaging>
<name>Multi Chapter Simple Web Application Project</name>
<dependencies>
<dependency>
<groupId>org.apache.geronimo.specs</groupId>
<artifactId>geronimo-servlet_2.4_spec</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>org.sonatype.mavenbook.multi</groupId>
<artifactId>simple-weather</artifactId>
<version>$project.version</version>
</dependency>
</dependencies>
<build>
<finalName>simple-webapp</finalName>
<plugins>
<plugin>
<groupId>org.wildfly.plugins</groupId>
<artifactId>wildfly-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
编辑:我刚用码头试过。工作正常。为什么它不适用于 Wildfly?
EDIT2:我正在使用 sonatype 书中的 simple-parent-project 示例
【问题讨论】:
【参考方案1】:在父 POM 中,您需要将 <skip>true</skip>
添加到配置中。然后为您的 WAR POM 将其设置为 false
。
父 POM
<plugin>
<groupId>org.wildfly.plugins</groupId>
<artifactId>wildfly-maven-plugin</artifactId>
<version>1.0.1.Final</version>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
战争 POM
<plugin>
<groupId>org.wildfly.plugins</groupId>
<artifactId>wildfly-maven-plugin</artifactId>
<configuration>
<skip>false</skip>
</configuration>
</plugin>
【讨论】:
谢谢,skip 完成了这项工作。但我仍然很困惑。首先,为什么我们需要跳过父pom。我认为通过构建父 pom,每个模块都将被自动部署,并且父级将被 wildfly 插件作为聚合器项目处理。第二件事是,为什么任何解决这个话题的网站都没有提到这一点。也许我只是没明白。 这只是插件的编写方式。我们应该将其更改为自动忽略 pom 包类型。 @James R. Perkins 如果我没有 war pom,我需要做什么?子模块被打包成 jars 并由 'maven-war-plugin' 添加到战争中,在父安装期间。如何部署这种战争? 您只需将<skip>true</skip>
添加到您不想部署的模块中,或者只在您想要部署的模块中指定插件。后者将要求您在执行插件目标时位于该目录中。【参考方案2】:
您的应用程序 EAR 可能不在父项目构建文件夹中。它可能位于 APP 模块构建项目中。如果您查看here:,您会看到,targetDir 默认为当前项目的构建目录。您可以提供另一个值。 filename 参数指向文件名。它默认为 $project.build.finalName.$project.packaging,在您的情况下,它没有有意义的扩展名。
你可能想尝试类似的东西
<configuration>
<targetDir>path</targetDir>
<filename>filename</filename>
</configuration>
到您的插件定义。您当然可以使用相对路径。您也可以尝试从 APP 项目中运行您的插件。
【讨论】:
父项目不需要是以上是关于Maven 无法从父 pom 部署的主要内容,如果未能解决你的问题,请参考以下文章
无法从父 pom.xml 解析子 pom.xml 中的 $project.version
如何抑制从父 pom.xml 运行 maven-javadoc-plugin?
无法使用 cargo-maven-plugin 重新部署到远程 tomcat 7