4

私はmavenの初心者で、android-maven-pluginを使用してAndroidプロジェクトをビルドするように構成しようとしています。assets ディレクトリに application.properties ファイルがあり、さまざまなアプリケーション設定が含まれています。そして、私は自分のポンからこの値を取得したいと考えています。プロパティファイルで、1つのプロパティを次のように定義します

myFilteredProperty=${helloFromPOM}

また、POM で同じプロパティを定義します。

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

アセット ディレクトリのフィルタリングを有効にしました

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

そして、android-maven-plugin のサンプルのようにリソース プラグインを構成します。

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

しかし、このプロパティを使用してアプリケーションで Toast を表示しようとすると、MY PROPERTY の代わりに ${helloFromPOM} が表示されます。

Maven によって生成されたターゲット ディレクトリでは、このプロパティ ファイルが 2 つの場所に表示されます。

  • /target/generated-sources/combined-assets/assets/application.properties
  • /target/myapp-0.0.1-SNAPSHOT.apk\application.properties

最初は間違っています。MY PROPERTY ではなく ${helloFromPOM} が含まれています。第二に、apk ファイルの内部は正しいです。しかし、デバイスにこの apk をインストールすると、間違った値 ${helloFromPOM} が表示されます。

私は何を間違えましたか?

編集

答えてくれてありがとう、試してみましたが、このエラーが発生しました:

[エラー] ソースの生成中にエラーが発生しました。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) at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145) at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder org.apache.maven.lifecycle の .buildProject(LifecycleModuleBuilder.java:84)。 http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException

POM でコメント<resourceDirectory>${project.build.directory}/filtered-assets</resourceDirectory>すると、ビルドは正常に完了しますが、フィルター処理されたアセットは使用されません。

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>も役に立ちません。

PS私のプラグインセクションは次のようになります

   <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>
4

3 に答える 3

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>
于 2012-06-06T07:29:00.323 に答える
0

pomでプロパティを指定している場合は、別のファイルでもプロパティを宣言しないでください。逆に、別のファイルで指定する場合は、POMで宣言しないでください。

ただし、何をしようとしているのか正確にはわかりません。mavenプロパティはpomファイル内でのみ有効であり、ビルドプロセス中に使用されます。アプリケーション内からそれらにアクセスすることはできません。Android / javaはそれらが存在することを知らず、それらを見ることができないので、${helloFromPOM}代わりにコードにを表示する理由MY PROPERTYは、android/javaがテキストを表示しているだけであるということです-それがプロパティとそれを表すことを知りませんそれを変数または他の値に解析する方法はありません。

于 2012-06-05T19:16:12.297 に答える
0

不適切なプラットフォーム バージョンが原因である場合があります。pomファイルで正しく設定してみてください。次のようなものを探します

<sdk>
    <platform>17</platform>
</sdk>
于 2013-04-08T09:17:42.683 に答える