使用maven内部版本号插件时获得以下异常.是否可以在使用内部版本号插件时禁用SCM检查?我们可以使用此插件在非SCM构建上生成内部版本号吗?
[ERROR] Failed to execute goal org.codehaus.mojo:buildnumber-maven-plugin:1.0:create (default) on project projectname: Execution default of goal org.codehaus.mojo:buildnumber-maven-plugin:1.0:create failed: The scm url cannot be null. -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.codehaus.mojo:buildnumber-maven-plugin:1.0:create (default) on project projectname: Execution default of goal org.codehaus.mojo:buildnumber-maven-plugin:1.0:create failed: The scm url cannot be null.
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:225)
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:534)
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) …Run Code Online (Sandbox Code Playgroud) 我有一个使用Spring Framework和Git的Java项目,我想显示一个内部版本号.我找到了Build Number Maven插件.使用Git,内部版本号是一个Git哈希.我不喜欢这个,我认为约会更有表现力.
我发现这篇优秀的博客文章解释了如何使用不同的SVN和Git配置文件编号插件.由于我只使用Git,而不是创建新的配置文件,我只是在我的构建标记中复制了插件部分.
当我运行"mvn package"时,它告诉我:
[INFO] --- buildnumber-maven-plugin:1.0:create (default) @ sherd ---
[INFO] Storing buildNumber: 2011-08-04_21-48_stivlo at timestamp: 1312487296631
Run Code Online (Sandbox Code Playgroud)
哪个看起来不错,但我想知道,它存放在哪里?"git status"没有检测到任何新文件,它似乎不在目标/中(目标/在我的.gitignore中).
也许我要更改配置以将内部版本号存储在文件中?如何使用内部版本号值?
感谢Michael-O的提示,我在Maven入门指南中阅读了有关如何过滤资源文件的章节.我在src/main/resources/properties/application.properties中创建了一个文件application.properties,其中包含以下内容:
# application properties
application.name=${pom.name}
application.version=${pom.version}
application.build=${buildNumber}
Run Code Online (Sandbox Code Playgroud)
我在构建部分中添加了以下XML代码段:
<resources>
<resource>
<directory>src/main/resources/properties</directory>
<filtering>true</filtering>
</resource>
</resources>
Run Code Online (Sandbox Code Playgroud)
现在,当我从命令行"mvn package"调用时,此属性文件将保存在target/classes/properties/application.properties中,例如具有以下内容:
# application properties
application.name=Sherd Control Panel
application.version=1.0.1-SNAPSHOT
application.build=2011-08-05_05-55_stivlo
Run Code Online (Sandbox Code Playgroud)
从命令行一切正常,但是,叹息,m2eclipse给出了Build错误:
05/08/11 6.05.03 CEST: Build errors for obliquid-cp;
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal
org.codehaus.mojo:buildnumber-maven-plugin:1.0:create (default) on project
sherd: Cannot get the branch information from …Run Code Online (Sandbox Code Playgroud) Maven Buildnumber插件似乎不适用于GIT.暂时有解决方法吗?我最近从SVN切换到GIT并发现它是一个简单的过渡,但这是我目前唯一没有工作的东西.
沃尔特
我正在尝试将svn.revision添加到项目版本作为内部版本号,但似乎无法这样做.我的jar有正确的名称durin打包,但它安装在我的本地存储库中,就好像$ {buildNumber}在设置版本时未定义.
我得到foo-1.0.0-SNAPSHOT- $ {buildNumber}而不是foo-1.0.0-SNAPSHOT- 304
知道我做错了什么或者在项目版本中添加修改是个坏主意吗?谢谢您的帮助.
<project>
...
<version>1.0.0-${release.identifier}-${buildNumber}</version>
<properties>
<release.identifier>SNAPSHOT</release.identifier>
</properties>
...
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>buildnumber-maven-plugin</artifactId>
<executions>
<execution>
<id>useLastCommittedRevision</id>
<goals>
<goal>create</goal>
</goals>
<configuration>
<useLastCommittedRevision>true</useLastCommittedRevision>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
...
</project>
Run Code Online (Sandbox Code Playgroud) 在ABC的pom我已经将属性定义为abc,其中ABC是模块.现在我想在ADF模块的pom中访问该属性.
<properties>
<A.B.C>${buildNumber}</A.B.C>
</properties>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>buildnumber-maven-plugin</artifactId>
<version>1.3</version>
<executions>
<execution>
<id>buildnumber</id>
<phase>validate</phase>
<goals>
<goal>create</goal>
</goals>
</execution>
</executions>
<configuration>
<timestampFormat>{0,date,dd-MM-yyyy HH:mm:ss}</timestampFormat>
<doCheck>false</doCheck>
<doUpdate>false</doUpdate>
<providerImplementations>
<svn>javasvn</svn>
</providerImplementations>
<revisiononscmfailure>
<!-- 71 Generate sequence build number based on: 72 build number and
timestamp 73 -->
<format>Build: #{0} ({1,date})</format>
<items>
<item>buildNumber\d*</item>
<item>timestamp</item>
</items>
</revisiononscmfailure>
</configuration>
<dependencies>
<dependency>
<groupId>com.google.code.maven-scm-provider-svnjava</groupId>
<artifactId>maven-scm-provider-svnjava</artifactId>
<version>2.1.1</version>
</dependency>
<dependency>
<groupId>org.tmatesoft.svnkit</groupId>
<artifactId>svnkit</artifactId>
<version>1.8.5</version>
</dependency>
</dependencies>
</plugin>
Run Code Online (Sandbox Code Playgroud)
我在$ ADF模块的pom中使用$ {ABC}作为版本的值.
<dependency>
<groupId></groupId>
<artifactId></artifactId>
<version>${A.B.C}</version>
<type>bundle</type>
</dependency>
Run Code Online (Sandbox Code Playgroud)
所以它给了我错误:bundle必须是有效的版本,但是$ {ABC}.
编辑:
或者我可以在某种程度上使用C模块的版本,因为我已经定义:
<version>${A.B.C}</version>
Run Code Online (Sandbox Code Playgroud) 在使用maven-buildnumber-plugin 1.0 beta 4时,似乎我可以获得svn修订版,除非我<format>在配置中使用标记.一旦我使用<format>和<item>buildnumber</item>标记,我得到一个自动递增的数字,但它不再对应于svn修订版,我不知道如何取回它.有没有办法在s内使用svn修订号<format>?文档不是很清楚.
我希望我的JAR/WAR应用程序知道它的源代码的SVN版本号是什么.我希望稍后为网页底部的Web最终用户呈现此修订号,等等.
是否有任何现有的Maven插件可以自动化该过程?我认为插件必须从中收集信息svn并保存到某些文件中,例如src/resources/revision.txt.
我们使用Maven作为构建版本,使用Mercurial作为我们的变更集.虽然我们的软件已经处理了主要版本,但我们真的希望能够知道Mercurial变更集用于构建运行我们软件的任何服务器.
有没有人知道在Maven中获取Mercurial中工作目录的变更集并将其放入属性文件中的方法,以便我们可以在我们的应用程序中的某个地方显示它,当sys管理员对当前运行的版本进行"健全性检查"时?
我对多模块项目中的属性有疑问.
考虑以下3级项目结构:
project
+- pom.xml (packaging: pom) //referred to as super-pom
+- module_group
+- pom.xml (packaging: pom) //referred to as group-pom
+- module
+-pom.xml (packaging: jar) //referred to as module-pom
Run Code Online (Sandbox Code Playgroud)
在super-pom中,我定义了一个属性修订版,它获取了默认值"unknown".
另外,我声明并使用buildnumber-maven-plugin配置为获取svn修订版并将其放入属性修订版中.
接下来我配置将该maven-jar-plugin属性写入清单.
在模块-pom我声明使用buildnumber-maven-plugin实际执行的.
这一切都在直接构建模块时起作用,即仅执行模块pom.清单包含由buildnumber-maven-plugin控制台中打印的as 报告的修订.
但是,如果我执行super-pom或group-pom,则将版本的默认值写入清单,尽管buildnumber-maven-plugin执行获取并检索正确的版本(它 在运行之前将其打印到控制台maven-jar-plugin).
所以我觉得我在多模块项目中缺少关于属性继承的东西.
有没有人知道这里有什么问题?或者任何人都可以指出我在这些情况下如何实际处理属性的描述(遗憾的是我还没有设法找到一个好的描述)?
更新
我做了一些研究和一些测试运行与调试输出(-X选项),从我到目前为止发现,我认为我的问题如下:
1)在pom解析期间,pom中使用的属性将替换为它们的值.
考虑这个部分pom:
<!-- declare the property default value -->
<properties>
<revision>default</revision>
</properties>
...
<!-- use the …Run Code Online (Sandbox Code Playgroud) 我对maven有疑问.如何通过命令行选项禁用buildnumber-maven-plugin.我想在我们的持续集成服务器上运行"mvn test"命令,但是这个cmd失败了,因为它试图构建一个版本并且没有访问我们的vcs(在tag中配置)的权限.因此可以通过cmd选项禁用它,或者只运行测试而不构建新的发行版本?谢谢你的帮助.