maven 发布:准备版本字符错误
Posted
技术标签:
【中文标题】maven 发布:准备版本字符错误【英文标题】:maven release:prepare version character error 【发布时间】:2012-06-12 09:18:29 【问题描述】:我正在尝试让 maven 发布插件工作,并与 Perforce 集成。我昨天终于到了某个地方并设法跑了:
mvn release:prepare
并被要求指定许多版本和新的工作快照。我将版本“0.1”(不带引号)指定为所有子项目的发布版本,并将工作快照设置为“1.0-SNAPSHOT”(与以前相同),因为我只是在测试插件和集成使用 Perforce,而不是实际尝试构建一个版本。但是,输入信息后出现以下错误:
[错误] 无法在项目 myproject 上执行目标 org.apache.maven.plugins:maven-release-plugin:2.3.1:prepare (default-cli):执行目标 org.apache.maven 的 default-cli。 plugins:maven-release-plugin:2.3.1:prepare failed: 数据“0.1”对于 JDOM 字符内容是不合法的:0x1b 不是合法的 XML 字符。 -> [帮助 1]
(我不能 100% 确定这是我得到的确切错误)
但是现在,每次我运行 mvn release:prepare
时,我都会遇到同样的错误(肯定是上面的那个),而没有机会重新提供版本或工作快照名称。
版本“0.1”是否无效,或者我是否设法在其中一个值中输入了转义字符(“0x1b”),或者其他地方有什么问题?
我也找不到我输入的值去了哪里。我怎样才能重新设置它们,或者从头开始准备输入新值?
在此先感谢任何查看此内容的人。
编辑:
我找到了后面部分的答案,即如何重置值。如果我跑
mvn release:prepare -Dresume=false
我可以再次输入值。
(正如@tom 已经在答案中提到的那样,我可以运行mvn release:rollback
来摆脱那里的那些。但是,这似乎不起作用,可能是因为准备失败了。)
这次我输入了默认值,但我注意到我的问题远不止于此,而且我可能没有正确设置 Perforce 集成。我得到这个信息输出:
没有找到密码,继续。
即使我将其设置为:
<server>
<id>ip-of-perforce-server</id>
<username>my-perforce-username</username>
<password>***************</password>
</server>
在我的 settings.xml 中。我只在项目的 pom 中的示例中看到过它的设置,但有人提到你可以在 settings.xml 中进行设置,这似乎是唯一有意义的事情(因为 pom 通常是 在 SCM)。如果我将用户名和密码指定为环境变量(-Dusername=xxx 等),我可以避免收到此消息。
但我也得到了错误:
CommandLineException 退出代码:1 - 客户端“PCNAME”未知 - 使用“客户端”命令创建它。
其中 PCNAME 是我的桌面的窗口名称。我试着跑了:
p4 client
然后打开一个包含内容的文件:
Client: PCNAME
Owner: my-perforce-username
Host: PCNAME
那么为什么它说它是未知的/需要创建的?
为了回答我自己,我只是注意到在运行 p4 client
后它说 Client PCNAME saved.
我猜这就是它显示的原因:P 所以我只需要按照错误消息中的说明进行操作。
现在我只需要解决问题:
如果我在 cygwin 中运行,我会收到错误 Path 'D:\Server\pom.xml' is not under client's root '/cygdrive/d/Server'
,我猜这与 unix 和 windows 路径之间的冲突有关。
除此之外,在输入我得到以下内容的版本之前,我没有收到任何错误:
java.io.IOException: The filename, directory name, or volume label syntax is incorrect
at java.io.WinNTFileSystem.canonicalize0(Native Method)
at java.io.Win32FileSystem.canonicalize(Win32FileSystem.java:396)
at java.io.File.getCanonicalPath(File.java:559)
at org.apache.maven.scm.provider.perforce.command.edit.PerforceEditCommand.createCommandLine(PerforceEditCommand.java:109)
at org.apache.maven.scm.provider.perforce.command.edit.PerforceEditCommand.executeEditCommand(PerforceEditCommand.java:51)
at org.apache.maven.scm.command.edit.AbstractEditCommand.executeCommand(AbstractEditCommand.java:40)
at org.apache.maven.scm.command.AbstractCommand.execute(AbstractCommand.java:59)
at org.apache.maven.scm.provider.perforce.PerforceScmProvider.edit(PerforceScmProvider.java:210)
at org.apache.maven.scm.provider.AbstractScmProvider.edit(AbstractScmProvider.java:560)
at org.apache.maven.shared.release.phase.AbstractRewritePomsPhase.writePom(AbstractRewritePomsPhase.java:631)
at org.apache.maven.shared.release.phase.AbstractRewritePomsPhase.transformProject(AbstractRewritePomsPhase.java:231)
at org.apache.maven.shared.release.phase.AbstractRewritePomsPhase.transform(AbstractRewritePomsPhase.java:125)
at org.apache.maven.shared.release.phase.AbstractRewritePomsPhase.execute(AbstractRewritePomsPhase.java:110)
at org.apache.maven.shared.release.DefaultReleaseManager.prepare(DefaultReleaseManager.java:234)
at org.apache.maven.shared.release.DefaultReleaseManager.prepare(DefaultReleaseManager.java:169)
at org.apache.maven.shared.release.DefaultReleaseManager.prepare(DefaultReleaseManager.java:146)
at org.apache.maven.shared.release.DefaultReleaseManager.prepare(DefaultReleaseManager.java:107)
at org.apache.maven.plugins.release.PrepareReleaseMojo.prepareRelease(PrepareReleaseMojo.java:291)
at org.apache.maven.plugins.release.PrepareReleaseMojo.execute(PrepareReleaseMojo.java:247)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)
at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183) at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161) at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:319)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156)
at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537)
at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:141)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409)
at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352)
[ERROR] CommandLineException Exit code: 1 - Usage: add/edit/delete [-c changelist#] [ -d -f -k -n -v ] [-t type] files...
Missing/wrong number of arguments.
Command line was:p4 -d D:\Server -p perforce-ip-and-port -u my-username -P my-password edit
org.codehaus.plexus.util.cli.CommandLineException: Exit code: 1 - Usage: add/edit/delete [-c changelist#] [ -d -f -k -n -v ] [-t type] files...
Missing/wrong number of arguments.
以及最终的 Maven 构建失败错误:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-release-plugin:2.3.1:prepare (default-cli) on project project-name: Error writing POM: D:\Server\pom.xml (Access is denied) -> [Help 1]
(请注意,在命令行上运行命令时也会发生这种情况,其中有关 pom 不在客户端视图中的错误确实 not 出现)
这似乎是我剩下的最后一个问题......到达那里:)
【问题讨论】:
您可以删除release.properties
并重试 - 此文件存储您输入的值。
我运行了mvn release:prepare -Dusername=MyName -Dpassword=*****
,这样我没有收到“未找到密码”消息,但仍然是“客户端 X 未知”错误...
刚刚注意到,如果我在 p4v 中转到 Connection > Edit Current Workspace...
并在 Advanced
选项卡下查看,上面的“PCNAME”值也是“主机”值。这真的应该是 perforce 服务器的 IP(或主机名)吗?似乎(从改变这一点)这是允许客户端连接到工作区的主机?这可能与错误有关吗?
我在这里解决了最初的问题后遇到的问题创建了一个新问题:***.com/questions/10999403/…
【参考方案1】:
0.1 绝对是合法版本。您输入的值已进入与您的pom.xml
文件处于同一级别的文件中(不记得名称,因为它们在mvn release:perform
之后消失了)。要删除它们,您可以使用mvn release:rollback
此外,在使用多模块项目时,请务必使用“autoVersionSubModules”标志:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>$maven.plugin.release.version</version>
<configuration>
<autoVersionSubmodules>true</autoVersionSubmodules>
</configuration>
</plugin>
这也会改变你的模块的版本。
编辑:此答案仅回答有关 maven 发布插件的部分。不是问题的其他部分。提问者决定就问题的其他部分提出新的问题。
【讨论】:
我在您的回答之后对我的问题添加了一些更新(并弄清楚如何摆脱损坏的输入)。作为旁注,当我后来再次使用“0.1”时它工作正常,所以我第一次一定设法在那里获得了一个转义字符。 由于这个问题几乎回答了我最初的问题,我将接受它并针对我当前的问题提出一个新问题(这个问题已经变得有点太大了):)跨度> 你说得对。每个“线程”一个问题让其他人很容易识别他们的问题并可能找到解决方案。谢谢。 顺便说一句,我发现了问题所在并“修复”了它。如果您想了解其他问题,请参阅link。以上是关于maven 发布:准备版本字符错误的主要内容,如果未能解决你的问题,请参考以下文章
Maven发布:准备失败,必须指定“scm connection或developerConnection”
maven 发布:由于 1.7 svn 工作副本准备失败(预计 1.6)
Maven 发布插件 - 准备创建快照版本而不是发布版本的标签