我试图从文本文件中读取我的构建版本号,然后将其分配给生成的包名: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背景)。
答案 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>