如何正确使用Maven和Android配置文件?

时间:2014-06-27 20:04:06

标签: android maven

我的目标是针对不同的部署阶段(开发,发布)使用两个不同的配置文件,因为当开发将debug标志设置为true时,release会将debug标志设置为false。当我构建没有配置文件时,它没有问题。但是,当我将构建部分放入配置文件时,Eclipse会抱怨以下消息:"Project build error: Unknown packaging: apk",尽管构建本身有效。

我的问题是:

  • 如何在使用配置文件时删除错误消息(有 SO的解决方案也有效,但在使用配置文件时却没有。)
  • 是否可以为两个配置文件配置通用配置构建基础,同时&#34;覆盖&#34;配置文件本身的一些配置?例如,个人资料1有<debug>true</debug>,个人资料2有<debug>false</debug>或者我是否必须在两个资料中编写整个构建部分?

这是我的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>
    <groupId>com.mydomain</groupId>
    <artifactId>myartifact</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>apk</packaging>
    <name>My App</name>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <platform.version>4.4.2</platform.version>
        <android.version>19</android.version>
        <android.plugin.version>3.8.2</android.plugin.version>
        <java.version>1.6</java.version>
        <android.sdk.path>/opt/android-sdk-linux</android.sdk.path>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <junit.version>4.8.2</junit.version>
        <mockito.version>1.9.5</mockito.version>
        <jackson.version>1.9.13</jackson.version>
        <hamcrest.version>1.3</hamcrest.version>
        <annotations.version>4.1.1.4</annotations.version>
        <supportv4.version>r13</supportv4.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>com.google.android</groupId>
            <artifactId>android</artifactId>
            <version>${platform.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>com.google.android</groupId>
            <artifactId>support-v4</artifactId>
            <version>${supportv4.version}</version>
        </dependency>
        <dependency>
            <groupId>com.nineoldandroids</groupId>
            <artifactId>library</artifactId>
            <version>2.4.0</version>
        </dependency>
        <!-- LInt Annotations -->
        <dependency>
            <groupId>com.google.android</groupId>
            <artifactId>annotations</artifactId>
            <version>${annotations.version}</version>
        </dependency>

        <dependency>
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson-mapper-asl</artifactId>
            <version>${jackson.version}</version>
        </dependency>

        <!-- Non Android Tests --><!-- hamcrest must be before JUnit due to build errors -->
        <dependency>
            <groupId>org.hamcrest</groupId>
            <artifactId>hamcrest-all</artifactId>
            <version>${hamcrest.version}</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-all</artifactId>
            <version>${mockito.version}</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.powermock</groupId>
            <artifactId>powermock-api-mockito</artifactId>
            <version>1.5.1</version>
        </dependency>

        <dependency>
            <groupId>org.powermock</groupId>
            <artifactId>powermock-module-junit4</artifactId>
            <version>1.5.1</version>
        </dependency>
    </dependencies>

    <profiles>
        <profile>
            <id>devel</id>
                <build>
                <finalName>${project.artifactId}</finalName>

                <plugins>
                    <plugin>
                        <artifactId>maven-compiler-plugin</artifactId>
                        <version>2.5.1</version>
                        <configuration>
                            <source>${java.version}</source>
                            <target>${java.version}</target>
                        </configuration>
                    </plugin>
                    <plugin>
                        <artifactId>maven-jarsigner-plugin</artifactId>
                        <version>1.2</version>
                    </plugin>
                    <plugin>
                        <artifactId>maven-resources-plugin</artifactId>
                        <version>2.5</version>
                        <configuration>
                            <encoding>UTF-8</encoding>
                        </configuration>
                    </plugin>
                    <plugin>
                        <groupId>com.jayway.maven.plugins.android.generation2</groupId>
                        <artifactId>android-maven-plugin</artifactId>
                        <version>${android.plugin.version}</version>
                        <extensions>true</extensions>
                        <configuration>
                            <androidManifestFile>${project.basedir}/AndroidManifest.xml</androidManifestFile>
                            <assetsDirectory>${project.basedir}/assets</assetsDirectory>
                            <resourceDirectory>${project.basedir}/res</resourceDirectory>
                            <nativeLibrariesDirectory>${project.basedir}/src/main/native</nativeLibrariesDirectory>
                            <sdk>
                                <platform>${android.version}</platform>
                                <path>${android.sdk.path}</path>
                            </sdk>
                            <undeployBeforeDeploy>false</undeployBeforeDeploy>
                            <sign>
                                <debug>true</debug>
                            </sign>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
            </profile>
    </profiles>
</project>

1 个答案:

答案 0 :(得分:2)

我认为这就是你要找的东西:

<profiles>
    <profile>
        <id>development</id>
        <properties>
            <debug>true</debug>
        </properties>
    </profile>
    <profile>
        <id>release</id>
        <properties>
            <debug>false</debug>
        </properties>
    </profile>
</profiles>

<build>
    <finalName>${project.artifactId}</finalName>

    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.5.1</version>
            <configuration>
                <source>${java.version}</source>
                <target>${java.version}</target>
            </configuration>
        </plugin>
        <plugin>
            <artifactId>maven-jarsigner-plugin</artifactId>
            <version>1.2</version>
        </plugin>
        <plugin>
            <artifactId>maven-resources-plugin</artifactId>
            <version>2.5</version>
            <configuration>
                <encoding>UTF-8</encoding>
            </configuration>
        </plugin>
        <plugin>
            <groupId>com.jayway.maven.plugins.android.generation2</groupId>
            <artifactId>android-maven-plugin</artifactId>
            <version>${android.plugin.version}</version>
            <extensions>true</extensions>
            <configuration>
                <androidManifestFile>${project.basedir}/AndroidManifest.xml</androidManifestFile>
                <assetsDirectory>${project.basedir}/assets</assetsDirectory>
                <resourceDirectory>${project.basedir}/res</resourceDirectory>
                <nativeLibrariesDirectory>${project.basedir}/src/main/native</nativeLibrariesDirectory>
                <sdk>
                    <platform>${android.version}</platform>
                    <path>${android.sdk.path}</path>
                </sdk>
                <undeployBeforeDeploy>false</undeployBeforeDeploy>
                <sign>
                    <debug>${debug}</debug>
                </sign>
            </configuration>
        </plugin>
    </plugins>
</build>

这样,您就有了一个公共构建标记和两个配置文件,每个配置文件都通过属性标记指定是否调试。然后在构建时指定您的个人资料,如下所示:-Pdevelopment-Prelease。希望它有所帮助。