maven-release-plugin:使用'working directory'执行失败... workspace \ target \ checkout \ workspace“不存在!”

时间:2010-05-10 16:11:12

标签: hudson version-control maven maven-release-plugin

我有maven项目在发布时失败:执行调用,虽然发布;准备按预期工作。

我发现了错误报告(如下),这似乎与我的问题相似,但并不完全确定我理解这个问题: MRELEASE516

我得到的最后几行输出:

[INFO] Executing: cmd.exe /X /C "p4 -d E:\hudson\jobs\myHudsonJob\workspace\target\checkout -p 1.1.1.1:1111: client -d myProjectWorkspace-MavenSCM-E:\hudson\jobs\myHudsonJob\workspace\target\checkout"
[INFO] Executing goals 'deploy'...
[WARNING] Base directory is a file. Using base directory as POM location.
[WARNING] Maven will be executed in interactive mode, but no input stream has been configured for this MavenInvoker instance.
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Error executing Maven.

Working directory "E:\hudson\jobs\myHudsonJob\workspace\target\checkout\workspace" does not exist!

通过阅读错误报告,错误的可能原因与我的模块结构有关,我试图在下面概述:

/workspace
|
|+ pom.xml (root pom whose parent is the build pom, 
|           calling release:perform on this pom)
|           [Modules: moduleA and moduleB]
|
|- moduleA
   |+ pom.xml (parent is also build pom)
   |+ build/pom.xml (the build pom - no custom parent)
|- moduleB
   |+ pom.xml (parent is build pom)

似乎根pom应该位于错误中的“工作区”内的某个公共目录中,但是尝试了它并且不起作用,也没有理解为什么我需要它。

警告基目录是一个文件要我做什么?!然后它会发现基本目录是 workspace ,这意味着找不到工作目录......任何想法?

提前致谢。

修改

检查了SCM配置后,对我来说一切都很好......在每个模块和我拥有的根pom中:

<scm>
<connection>
    scm:perforce:1.1.1.1:1111://rootToDirectoryContainingRelevantPom
</connection>
<developerConnection>
    scm:perforce:1.1.1.1:1111://rootToDirectoryContainingRelevantPom
</developerConnection>
</scm>

编辑2:

也许我已经点击了MRELEASE-261

5 个答案:

答案 0 :(得分:0)

我不确定你是否面对MRELEASE-516(约为release:prepare)。但是,我想知道每个POM中是否有正确的<scm>信息。你能证实一下吗?

答案 1 :(得分:0)

Working directory "E:\hudson\jobs\myHudsonJob\workspace\target\checkout\workspace" does not exist!

我刚看到你日志中的上一行。看起来你在某处设置了一些棘手的路径。你在某处覆盖了工作区吗?检查您的配置并尝试尽可能消除可选设置。

答案 2 :(得分:0)

我通过使用更新版本的发布插件来实现这一点。 Maven super pom依赖于定义的发布插件的v2.0。如果你没有覆盖它,那么将使用该版本。

您可以在运行插件时指定较新的版本

  mvn org.apache.maven.plugins:maven-release-plugin:2.2.1:perform

或者您可以覆盖pom中的依赖项版本

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-release-plugin</artifactId>
    <version>2.2.1</version>
  </plugin>

答案 3 :(得分:0)

在我的情况下,相同的症状被证明是maven-release-plugin中的错误的结果:2.2.1。请参阅MRELEASE-705

所以为了摆脱这个错误,我必须把它放到父pom中:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-release-plugin</artifactId>
            <version>2.0</version>
        </plugin>
    </plugins>
</build>

答案 4 :(得分:0)

我们发生了这个错误

Working directory E:\Data\myproject\target\checkout does not exist!

我们正处于服务器工具的大转变过程中,maven的release:prepare似乎无声地失败,声称标签和版本号更改已被推送而没有错误。然而,经过一些研究,这些东西只被提交到本地git存储库,而不是被推送 - 即使release:prepare正在执行命令来执行推送但从未报告过失败 - 即使使用maven {{1 }和-e命令行参数。

我们正在使用Maven 3.3.9,maven release plugin 2.5.3和git client 2.9.2。

我们的最终解决方案是在我们的git服务器(源主机)的maven -X文件中添加 a(或更正,视情况而定)定义,包括用户名和密码推送标签的权限(以及推送到主人)。 git服务器的服务器定义中的~\.m2\settings.xml必须是git服务器的主机名:

id

通过此更新,标记在服务器上完成,并且检出成功。