2013-05-16 59 views
1

更新我检举此问题被关闭,因为似乎没有解决 - 插件根本就没有表现,因为它应该,没有人似乎知道为什么。我已经结束了写一个小程序,手动复制发布插件自己的期望的行为,使用其他插件,如scmversions。如果你想了解我是如何做到的,请随时给我发电子邮件。Maven的版本:执行覆盖首次发布,以后每发布


我最近把我的项目移到了maven。但是,我在发布过程中遇到问题。

我的释放过程如下:

mvn scm:checkout -DconnectionUrl=scm:svn:https://my-server/svn/my-project/trunk -DcheckoutDirectory=my-project 
cd my-project 
mvn --batch-mode release:prepare 
mvn release:perform 

我开始1.0.0-SNAPSHOT,我运行上面所示的释放过程。这将更新我的回购以下(升序新奇):如预期,包括pom.xml更新指向1.0.1-SNAPSHOT和一个名为my-project-1.0.0在我SCM创建标签时

1.0.0-SNAPSHOT 
1.0.0 
1.0.1-SNAPSHOT 

一切。然而,当我再次运行程序,下面出现在我的回购:

1.0.0-SNAPSHOT 
1.0.1-SNAPSHOT 
1.0.0 
1.0.2-SNAPSHOT 

也就是说,释放,从未创建1.0.1,而是1.0.1-SNAPSHOT被释放到1.0.0。需要注意的是所有其他方面运行正常 - 在pom.xml现在指向1.0.2-SNAPSHOT,并在我的SCM名为my-project-1.0.1创建一个标签。

事实上,我每次运行的释放过程中,快照增加,但释放被写入到1.0.0与不创建一个新的版本。例如,重新运行释放过程3进一步倍结果如下:

1.0.0-SNAPSHOT 
1.0.1-SNAPSHOT 
1.0.2-SNAPSHOT 
1.0.3-SNAPSHOT 
1.0.4-SNAPSHOT 
1.0.0 
1.0.5-SNAPSHOT 

用于上述预期的行为是:

1.0.0-SNAPSHOT 
1.0.0 
1.0.1-SNAPSHOT 
1.0.1 
1.0.2-SNAPSHOT 
1.0.2 
1.0.3-SNAPSHOT 
1.0.3 
1.0.4-SNAPSHOT 
1.0.4 
1.0.5-SNAPSHOT 

pom.xml为第一个版本如下所示:下面

<project xmlns="http://maven.apache.org/POM/4.0.0" x mlns: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> 
<groupId>com.foo</groupId> 
<artifactId>my-project</artifactId> 
<packaging>jar</packaging> 
<version>1.0.0-SNAPSHOT</version> 
<name>my-project</name> 

<distributionManagement> 
    <repository> 
     <id>my-server</id> 
     <url>file://\\my-server\repo\</url> 
    </repository> 
</distributionManagement> 

<scm> 
    <developerConnection>scm:svn:https://my-server/svn/my-project</developerConnection> 
</scm> 

<build> 
    <plugins> 

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

    </plugins> 


</build> 

<repositories> 
    <repository> 
     <id>my-server</id> 
     <url>file://\\my-server\repo\</url> 
    </repository> 
</repositories> 

</project> 

答案之一建议我应该创建一个单独的releasesnapshot回购,我却没有。这是否会导致问题?

请注意,我用的詹金斯每当代码致力于自动调用mvn deploy。然而这也正是作为预期(取版本承诺pom.xml被指定为回购协议,即部署),所以我怀疑这是问题的一部分。

非常感谢您的任何帮助。


更新

检查从mvn release:perform命令我看到下面的输出:

Checking out the project to perform the release ... 
Executing: cmd.exe /X /C "svn --non-interactive checkout https://my-server/svn/my-project/tags/my-project-1.0.2 c:\localrelease\mvn\my-project\target\checkout" 
Working directory: c:\localrelease\mvn\my-project\target 
Invoking perform goals in directory c:\localrelease\mvn\my-project\target\checkout\tags\my-project-1.0.0\trunk 
Executing goals 'deploy'... 

而且有它每次释放到1.0.0的原因 - 它检查出来的更新标签,但在旧标签1.0.0上发布(即使1.0.1标签存在于目标/检出文件夹中)。它为什么这样做?


更新2

我已经分裂到2个独立的存储库(一个快照和一个目标),而此问题仍然出现。

另外,我在调查日志release:perform时注意到了一些事情:标签my-project-1.0.1的结帐包含1.0.0的标签。同样,标签1.0.2的结帐包含标签1.0.01.0.1等。这是正确的行为吗?

或许释放过程中总是在寻找什么的它检查出来,并使用第一个找到,这将永远是1.0.0每一个版本除了的第一个版本标签的文件夹。

这似乎是一个非常奇怪的解释,但它是迄今为止我所见到的行为中唯一的一个。现在的问题是,我错误地在我的pom.xml中配置了什么,导致这种情况发生?

另一个注意事项:执行释放时,部署目标投诉'build.plugins.plugin.version' for org.apache.maven.plugins:maven-xxxx-plugin is missing.对于maven-javadoc-pluginmaven-deploy-pluginmaven-source-plugin。我需要明确添加这些吗?

回答

4

的第一件事情是,你开始是错误的版本:

  1. 检查出最新的代码(与当前指向1.0.0最新POM)
  2. 创建一个新版本1.0.1 -SNAPSHOT
  3. 更新POM,以指向1.0.1的快照和提交其

通常的方法是开始一个快照版本(也是第一个开发步骤),原因快照表明它是正在开发之中。

  1. 结账最新的版本1.0.0-SNAPSHOT
  2. 代码将创建SVN标签1.0.0和创造新的聚甲醛的(maven-release-prepare describes the detailed steps)。
  3. 创建新版本1.0。1 - 快照

后释放:执行将执行以下操作:

结账标记的1.0.0版本,并会部署站点部署maven-release-perform

而且下次调用下一个开发周期的发布周期将从1.0.1-SNAPSHOT到1.0.1版本和1.0.2-SNAPSHOT。

除了上述内容,您应该使用库管理器,如Artifactory, Nexus, Archiva instead of a file repository。如果某个RepoMgmt有一个单独的SNAPSHOT存储库和可以随时清理SNAPSHOT存储库的版本,您也可以与应以正确的方式来完成,如下面的文件访问权限的设置:

<distributionManagement> 
    <repository> 
     <id>releases</id> 
     <url>file:///C:/maven/releases</url> 
    </repository> 
    <snapshotRepository> 
     <id>snapshots</id> 
     <url>file:///C:/maven/snapshots</url> 
    </snapshotRepository> 
    <site> 
     <id>site</id> 
     <url>file:///C:/maven/sites/${project.groupId}/${project.artifactId}/${project.version}</url> 
    </site> 
</distributionManagement> 

此外,如果你做另外的快照,并释放存储库的元数据文件将寻求在释放存储库和快照库不同。

默认的发布周期是从快照在释放将一个快照这样的:

1. Cycle 
1.0.2-SNAPSHOT 
1.0.2 
1.0.3-SNAPSHOT 

2. Cycle 
1.0.3-SNAPSHOT 
1.0.3 
1.0.4-SNAPSHOT 

3. Cycle 
1.0.4-SNAPSHOT 
1.0.4 
1.0.5-SNAPSHOT 

and so forth. 
+0

谢谢你的回应。我可能在我的问题中解释得很差,但我确实了解应该发生的周期。也许这是由于不正确的设置(我今天将从一张干净的纸上进行测试),但问题似乎是'release:perform'总是写入1.0.1。目前我在1.0.7-SNAPSHOT上;当我运行释放过程时,它移动到1.0.8-SNAPSHOT,但随后'释放'到1.0.1,而不是1.0.7。每次我运行'release:perform'时,它都会覆盖第一个发行版。初始回购设置中的某些错误是否会导致此问题? –

+0

我尝试了一个完全和新的项目(虽然仍然只有一个存储库),并再次出现同样的问题。从'1.0.0-SNAPSHOT'开始,我运行释放过程并将1.0.0发布到回购站,将标签'my-project-1.0.0'添加到SCM和'1.0.1-SNAPSHOT'在回购中创建(并且更新了poms)。当我再次运行释放过程时,将标记'my-project-1.0.1'添加到SCM,将'1.0.2-SNAPSHOT'添加到回购中,但释放'1.0.1'从不出现在回购中 - 相反'1.0.0'被覆盖。任何想法是什么造成这种情况?单个存储库是否是问题? –

+0

这不可能。你可以把这个完整的项目推到Github上,或者在github上做一个主题,所以我可以看看它。 – khmarbaise

0

我有完全相同的问题,事实证明,问题是SCM connectiondeveloperConnection配置。我已经使用标准SVN布局(tunk,分支,标签)了,可是我所提供的网址,我回购的根目录下:

<scm> 
    <connection>scm:svn:file:///C:/var/svn/main</connection> 
    <developerConnection>scm:svn:file:///C:/var/svn/main</developerConnection> 
</scm> 

相反,我应该有trunk

提供的网址
<scm> 
    <connection>scm:svn:file:///C:/var/svn/main/trunk</connection> 
    <developerConnection>scm:svn:file:///C:/var/svn/main/trunk</developerConnection> 
</scm> 

就是这样。根据当前的project.version,添加/trunk导致maven-release-plugin发布我的模块。