maven - 从属性文件中读取版本号

时间:2011-12-16 23:22:04

标签: maven properties

我试图从文本文件中读取我的构建版本号,然后将其分配给生成的包名:myRelease-1.1.1.apk,其中内部版本号被手动设置为属性文件 version.number = 1.1.1 如何通过属性文件中的那个重载pom.xml中设置的$ {version.number}?

编辑:有关该项目的更多详细信息 。我使用git提交属性文件,然后Jenkins接管并使用Maven构建。我想最终得到一个构建“myBuild-9.9.9.apk”。现在我有“myBuild-1.1.2.apk” 在extras / version.properties中

project.version=9.9.9  

在pom.xml中

<?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>
            .....
            <version>1.1.2</version>
      </parent>

      <groupId>ca.lapresse.android</groupId>
      <artifactId>lapresse-hockey-app</artifactId>
      <packaging>apk</packaging>
      <name>La Presse Hockey - App</name>
      <version>1.1.2</version>

...... ${project.artifactId}似乎从<version></version>获取版本号,它变为1.1.2。这应该反映在${project.version}中,我试图从属性文件中重载。

<plugin>
<groupId>org.codehaus.mojo</groupId>
      <artifactId>properties-maven-plugin</artifactId>
      <version>1.0-alpha-2</version>
      <executions>
            <execution>
                  <phase>process-resources</phase>
                  <goals>
                        <goal>read-project-properties</goal>
                  </goals>
                  <configuration>
                        <files>
                              <file>${project.basedir}/extras/version.properties</file>
                        </files>
                  </configuration>
            </execution>
      </executions>
</plugin>

我做错了什么,我根本没做什么?我对Maven的理解非常简陋(我来自Ant背景)。

4 个答案:

答案 0 :(得分:6)

回答我自己的问题:事实证明Maven需要在脚本中发生任何事情之前设置属性。因此,它是一成不变的,不能从文件中修改。我最终编写了一个Ant任务,在触发Maven脚本之前修改了pom.xml并更改了文件中的版本。丑陋和不平凡,但它的工作原理。

答案 1 :(得分:4)

阅读以下答案:

或只是:


<project>
  <build>
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>properties-maven-plugin</artifactId>
        <version>1.0</version>
        <executions>
          <execution>
            <phase>initialize</phase>
            <goals>
              <goal>read-project-properties</goal>
            </goals>
            <configuration>
              <files>
                <file>dev.properties</file> <======== IT IS!!!!!
              </files>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>

更新工作概念证明是http://sourceforge.net/u/gavenkoa/exp/ci/default/tree/maven/properties/pom.xml

的子项目

将构建运行为mvn compile,检查pom.xml和控制台输出。

答案 2 :(得分:0)

由于你已经有了pom.xml,你不需要另外一个属性文件来定义这样一个简单的属性,使用POM的属性标签并覆盖默认的构建finalName:

<properties>
  <final.build.version>1.1.1</final.build.version>
</properties>
<build>
  ... ...
  <finalName>${project.artifactId}-${final.build.version}</finalName>
  ... ...
</build>

如果您在发布阶段使用maven sign并压缩最终的apk,并想在此处覆盖最终名称,请使用:

<build>
  <plugins>
    <plugin>
      <groupId>com.jayway.maven.plugins.android.generation2</groupId>
      <artifactId>android-maven-plugin</artifactId>
      <extensions>true</extensions>
      <inherited>true</inherited>
      <configuration>
        <undeployBeforeDeploy>true</undeployBeforeDeploy>
        <sign>
          <debug>false</debug>
        </sign>
        <zipalign>
          <verbose>true</verbose>
          <inputApk>${project.build.directory}/${project.artifactId}-${final.build.version}.apk</inputApk>
          <outputApk>${project.build.directory}/${project.artifactId}-${final.build.version}-signed-aligned.apk</outputApk>
        </zipalign>
        </configuration>
          <executions>
            <execution>
              <id>alignApk</id>
              <phase>package</phase>
              <goals>
                <goal>zipalign</goal>
              </goals>
            </execution>
          </executions>
      </plugin>
   </plugins>
</build>

编辑:
如果您必须使用属性文件,请使用properties-maven-plugin,请查看类似的SO问题here

希望得到这个帮助。

答案 3 :(得分:0)

我发现我可以通过使用从上面建议的文件中读取的内容来解决maven中的这个问题,这可以用于“过滤”(将内容放入属性模板文件中),因此我的应用程序知道它是什么版本尽管maven很困惑。

我希望它在pom文件中的原因是将版本号放入几个缩小的javascript文件名中,这样它们就不会在版本更新中缓存...严格来说这不需要实际版本号所以我使用${maven.build.timestamp}代替以yyyymmdd-hhmm格式输出构建的日期+时间。

我认为如果我需要一些更复杂的东西,我会开始将东西拆分成msbuild或类似的东西...... Maven不会让事情变得简单,经过一年的斗争,我真的不觉得它变得更好了。 / p>