Maven无法从父POM部署

10

我刚开始使用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>

编辑: 我刚刚尝试了在jetty上的运行,运行良好。为什么在Wildfly上就不能运行呢?

编辑2: 我正在使用sonatype书中的simple-parent-project示例。

2个回答

19
在父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>

战争猪肉

<plugin>
    <groupId>org.wildfly.plugins</groupId>
    <artifactId>wildfly-maven-plugin</artifactId>
    <configuration>
        <skip>false</skip>
    </configuration>
</plugin>

谢谢,跳过已经完成了工作。但我仍然感到困惑。首先,为什么我们需要跳过父POM。我认为通过构建父POM,每个模块都将被自动部署,并且父POM将由wildfly插件处理为聚合器项目。第二个问题是,为什么任何涉及此主题的网站都没有提到这一点。也许我只是没理解。 - claim
1
这只是插件编写的方式。我们应该更改它以自动忽略pom包类型。 - James R. Perkins
@James R. Perkins,如果我没有war pom文件,我需要做什么?子模块被打包为jar并由'maven-war-plugin'添加到war中,在父级安装期间。如何部署这种类型的war? - bmlynarczyk
2
你只需要在不想部署的模块中添加 <skip>true</skip> 或者只在你想要部署的模块中指定插件。后者需要在执行插件目标时进入该目录。 - James R. Perkins

1

你的应用EAR文件可能没有位于父项目构建文件夹中,而是位于APP模块构建项目中。如果你在这里查看,你会发现有一个targetDir默认指向当前项目的构建目录。你可以提供另一个值。而filename参数指向文件名。它默认为${project.build.finalName}.${project.packaging},在你的情况下它没有一个有意义的扩展名。

你可能想尝试类似以下的操作:

        <configuration>
            <targetDir>path</targetDir>
            <filename>filename</filename>
        </configuration> 

针对您的插件定义,您可以使用相对路径。当然,您也可以尝试从APP项目中运行您的插件。


父项目不需要是<packaging>pom</packaging>吗?尝试更改它,但Eclipse会提示:聚合器项目需要是pom。只想提一下,我正在使用来自Sonatype的简单父示例。我唯一更改的是添加了wildfly maven插件。即使我更改targetDir,我也不知道该指向哪里。 - claim
是的,那是我的错。你是正确的。所以你可能需要重新定义文件名的默认值。你也可以尝试从你的应用项目中运行插件。我会更新我的答案。 - skegg99
更改目标目录和文件名没有奏效。我仍然得到相同的错误。为什么它在Jetty上运行而在JBoss上不行?你说的“从APP项目运行插件”是什么意思? - claim
问题仍然可能出在文件位置上。只需在正常构建后找到需要部署的文件,重写插件设置,包括更正的文件名和可能的路径即可。 - skegg99
现在我这样做:我使用父POM构建我的项目,并部署Web应用程序WAR文件,现在我正在父POM中指向它。这个方法可行,但听起来有些不对劲。 - claim
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接