4

Я новичок в maven и пытаюсь настроить его для создания моего проекта Android с помощью андроид-maven-плагина. У меня есть файл application.properties в каталоге ресурсов, который содержит разные настройки приложения. И я хочу получить эти ценности от моего пом. В свойствах файла я определить одно свойство, какandroid-maven-plugin и фильтрация ресурсов

myFilteredProperty=${helloFromPOM} 

, а также определить то же свойство в POM:

<properties> 
     <helloFromPOM>MY PROPERTY</helloFromPOM> 
    </properties> 

Switched фильтрацию активов Dir

<build> 
    ... 
    <resources> 
     <resource> 
      <directory>${project.basedir}/assets</directory> 
      <filtering>true</filtering> 
     </resource> 
    </resources> 
    ... 
</build> 

и настроить Recources плагин, как в samples для android-maven-plugin

 <plugin> 
      <artifactId>maven-resources-plugin</artifactId> 
      <executions> 
       <execution> 
        <phase>initialize</phase> 
        <goals> 
         <goal>resources</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 

Но когда я пытаюсь показать Toast в своем приложении с этим свойством, я вижу $ {helloFromPOM} вместо МОИ СОБСТВЕННОСТЬ.

В моей целевой каталог, который генерируется мавена я вижу этот файл свойств в двух местах:

  • /target/generated-sources/combined-assets/assets/application.properties
  • /цель/MyApp -0.0.1-SNAPSHOT.apk \ application.properties

Сначала не так, он содержит $ {helloFromPOM} вместо МОИ СОБСТВЕННОСТЬ. Во-вторых, внутри файла apk правильно. Но когда я устанавливаю этот apk на устройстве, он показывает мне неправильное значение $ {helloFromPOM}.

Что я сделал неправильно?

EDIT

Спасибо за ответ, я судимый, но получает эту ошибку:

[ERROR] Error when generating sources. org.apache.maven.plugin.MojoExecutionException: at com.jayway.maven.plugins.android.phase01generatesources.GenerateSourcesMojo.generateR(GenerateSourcesMojo.java:338) at com.jayway.maven.plugins.android.phase01generatesources.GenerateSourcesMojo.execute(GenerateSourcesMojo.java:102) at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101) at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209) 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:320) at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156) at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537) 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) at java.lang.reflect.Method.invoke(Method.java:597) at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290) at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230) at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409) at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352) at org.codehaus.classworlds.Launcher.main(Launcher.java:47) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120) Caused by: com.jayway.maven.plugins.android.ExecutionException: ANDROID-040-001: Could not execute: Command = 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"", Result = 1 at com.jayway.maven.plugins.android.CommandExecutor$Factory$1.executeCommand(CommandExecutor.java:215) at com.jayway.maven.plugins.android.phase01generatesources.GenerateSourcesMojo.generateR(GenerateSourcesMojo.java:336) ... 28 more [INFO] ------------------------------------------------------------------------ [INFO] BUILD FAILURE [INFO] ------------------------------------------------------------------------ [INFO] Total time: 4.307s [INFO] Finished at: Wed Jun 06 10:37:14 MSK 2012 [INFO] Final Memory: 7M/16M [INFO] ------------------------------------------------------------------------ [ERROR] Failed to execute goal com.jayway.maven.plugins.android.generation2:android-maven-plugin:3.2.0:generate-sources (default-generate-sources) on project magent: MojoExecutionException: ANDROID-040-001: Could not execute: Command = 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"", Result = 1 -> [Help 1] [ERROR] [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. [ERROR] Re-run Maven using the -X switch to enable full debug logging. [ERROR] [ERROR] For more information about the errors and possible solutions, please read the following articles: [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException

Когда я комментарий <resourceDirectory>${project.build.directory}/filtered-assets</resourceDirectory> в POM, строить отделочную преуспевающий, но он не использует отфильтрованную assests ,

Также я пытаюсь выполнить это 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> до <resourceDirectory>${project.build.directory}\filtered-assets</resourceDirectory> тоже не поможет.

P.S. мои плагины раздел выглядит так

<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> 
+0

Спасибо, я отвечу на ваш комментарий. См. Раздел EDIT –

ответ

8

Теперь это работает, я меняю <resourceDirectory>${project.build.directory}/filtered-assets</resourceDirectory> на <assetsDirectory>${project.build.directory}/filtered-assets</assetsDirectory>. Результаты POM:

<properties> 
    <myProperty>MY PROPERTY!!!!111</myProperty> 
</properties> 

    <resources> 
     <resource> 
      <directory>${project.basedir}/assets</directory> 
      <filtering>true</filtering> 
      <targetPath>${project.build.directory}/filtered-assets</targetPath> 
      <includes> 
       <include>**/*.properties</include> 
      </includes> 
     </resource> 
    </resources> 

    <plugins> 
     <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> 
       <assetsDirectory>${project.build.directory}/filtered-assets</assetsDirectory> 
      </configuration> 
      <extensions>true</extensions> 
     </plugin> 
0

При указании свойство в вашем ПОМ вы не должны иметь его объявили в отдельном файле, а также. И наоборот, если вы хотите указать его в отдельном файле, вы не должны объявлять его в своем POM.

Однако я не уверен точно, что вы пытаетесь сделать - свойства maven действительны только в вашем файле pom и предназначены для использования во время процесса сборки. Вы не можете получить к ним доступ из своего приложения.Android/java понятия не имеют, что они существуют и не могут их видеть, поэтому причина, по которой вы видите ${helloFromPOM} в своем коде вместо MY PROPERTY, заключается в том, что андроид/java просто отображает текст - он не знает, что это означает свойство и он не имеет возможности разобрать его в переменную или другое значение.

+0

Я не хочу напрямую использовать свойства POM из своего приложения. Я хочу использовать для него фильтрацию ресурсов maven. http://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html –

0

Иногда это вызвано неправильной версией платформы. Попробуйте установить его прямо в файле pom. Ищите smthg как

<sdk> 
    <platform>17</platform> 
</sdk>