我是 Maven 的新手,并尝试配置它以使用 android-maven-plugin 构建我的 android 项目。
我在资产目录中有一个 application.properties 文件,其中包含不同的应用程序设置。我想从我的 pom.xml 中获取这个值。在属性文件中,我将一个属性定义为
myFilteredProperty=${helloFromPOM}
并在 POM 中定义相同的属性:
<properties>
<helloFromPOM>MY PROPERTY</helloFromPOM>
</properties>
开启对资产目录的过滤
<build>
...
<resources>
<resource>
<directory>${project.basedir}/assets</directory>
<filtering>true</filtering>
</resource>
</resources>
...
</build>
并配置资源插件,如下所示samples对于 android-maven-插件
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<executions>
<execution>
<phase>initialize</phase>
<goals>
<goal>resources</goal>
</goals>
</execution>
</executions>
</plugin>
但是当我尝试在我的应用程序中使用此属性显示 Toast 时,我看到 ${helloFromPOM} 而不是我的属性。
在我的 Maven 生成的目标目录中,我在两个地方看到这个属性文件:
- /target/ generated-sources/combined-assets/assets/application.properties
- /target/myapp-0.0.1-SNAPSHOT.apk\application.properties
首先是错误的,它包含 ${helloFromPOM} 而不是 MY PROPERTY。其次,apk文件里面是正确的。但是当我在设备上安装这个 apk 时,它显示错误的值 ${helloFromPOM}。
我做错了什么?
EDIT
感谢您的回答,我尝试了一下,但出现此错误:
[错误] 生成源时出错。
org.apache.maven.plugin.MojoExecutionException:位于
com.jayway.maven.plugins.android.phase01generatesources.GenerateSourcesMojo.generateR(GenerateSourcesMojo.java:338)
在
com.jayway.maven.plugins.android.phase01generatesources.GenerateSourcesMojo.execute(GenerateSourcesMojo.java:102)
在
org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101)
在
org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209)
在
org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
在
org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
在
org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)
在
org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)
在
org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183)
在
org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161)
在 org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:320) 处
org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156) 在
org.apache.maven.cli.MavenCli.execute(MavenCli.java:537) 在
org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196) 在
org.apache.maven.cli.MavenCli.main(MavenCli.java:141) 位于
sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法) at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
在
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
在 java.lang.reflect.Method.invoke(Method.java:597) 处
org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290)
在
org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230)
在
org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409)
在
org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352)
在 org.codehaus.classworlds.Launcher.main(Launcher.java:47) 处
sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法) at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
在
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
在 java.lang.reflect.Method.invoke(Method.java:597) 处
com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
引起原因:com.jayway.maven.plugins.android.ExecutionException:
ANDROID-040-001:无法执行:Command = cmd.exe /X /C
“”C:\ Program Files \ Android \ android-sdk \ platform-tools \ aapt.exe”
包-m -J D:\projects\myapp\target\ generated-sources\r -M
D:\projects\myapp\AndroidManifest.xml -S
D:\projects\myapp\target\filtered-assets --auto-add-overlay -A
D:\projects\myapp\assets -I "C:\Program
文件\Android\android-sdk\platforms\android-8\android.jar"",结果=
1 于
com.jayway.maven.plugins.android.CommandExecutor$Factory$1.executeCommand(CommandExecutor.java:215)
在
com.jayway.maven.plugins.android.phase01generatesources.GenerateSourcesMojo.generateR(GenerateSourcesMojo.java:336)
... 28 更多 [信息]
-------------------------------------------------- ---------------------- [信息] 构建失败 [信息]
-------------------------------------------------- ---------------------- [INFO] 总时间:4.307s [INFO] 完成于:Wed Jun 06 10:37:14 MSK
2012 [INFO] 最终内存:7M/16M [INFO]
-------------------------------------------------- ---------------------- [错误] 未能执行目标
com.jayway.maven.plugins.android. Generation2:android-maven-plugin:3.2.0:generate-sources
(默认生成源)项目 magent:MojoExecutionException:
ANDROID-040-001:无法执行:Command = cmd.exe /X /C
“”C:\ Program Files \ Android \ android-sdk \ platform-tools \ aapt.exe”
包-m -J D:\projects\myapp\target\ generated-sources\r -M
D:\projects\myapp\AndroidManifest.xml -S
D:\projects\myapp\target\filtered-assets --auto-add-overlay -A
D:\projects\myapp\assets -I "C:\Program
文件\Android\android-sdk\platforms\android-8\android.jar"",结果=
1 -> [Help 1] [ERROR] [ERROR] 查看完整的堆栈跟踪
错误,使用 -e 开关重新运行 Maven。 [错误] 使用重新运行 Maven
-X 开关启用完整的调试日志记录。 [错误] [错误] 了解更多
有关错误和可能的解决方案的信息,请阅读
以下文章:[错误] [帮助 1]http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
当我评论的时候<resourceDirectory>${project.build.directory}/filtered-assets</resourceDirectory>
在 POM 中,构建成功完成,但它不使用过滤的资源。
我也尝试执行这个cmd.exe /X /C ""C:\Program Files\Android\android-sdk\platform-tools\aapt.exe" package -m -J D:\projects\myapp\target\generated-sources\r -M D:\projects\myapp\AndroidManifest.xml -S D:\projects\myapp\target\filtered-assets --auto-add-overlay -A D:\projects\myapp\assets -I "C:\Program Files\Android\android-sdk\platforms\android-8\android.jar""
在我的命令行中并收到此错误:invalid resource directory name: D:\projects\myapp\target\filtered-assets/application.properties
。过滤资产后使用错误的斜杠而不是反斜杠。改变<resourceDirectory>${project.build.directory}/filtered-assets</resourceDirectory>
to <resourceDirectory>${project.build.directory}\filtered-assets</resourceDirectory>
也没有帮助。
附:我的插件部分看起来像这样
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<executions>
<execution>
<phase>initialize</phase>
<goals>
<goal>resources</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
<plugin>
<groupId>com.jayway.maven.plugins.android.generation2</groupId>
<artifactId>android-maven-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<sdk>
<platform>8</platform>
</sdk>
<emulator>
<avd>2.3.3_API-10</avd>
</emulator>
<undeployBeforeDeploy>true</undeployBeforeDeploy>
<resourceDirectory>${project.build.directory}/filtered-assets</resourceDirectory>
</configuration>
<extensions>true</extensions>
</plugin>