Android项目的Maven编译错误“错误:包R不存在”

时间:2013-10-21 14:14:16

标签: java android maven

我正在尝试使用Android应用程序设置MAVEN项目。 我有这个pom文件

<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.myproject</groupId>
  <artifactId>userprofile</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>userprofile</name>
  <url>http://maven.apache.org</url>
    <dependencies>
        <dependency>
            <groupId>com.google.android</groupId>
            <artifactId>android</artifactId>
            <version>4.1.1.4</version>
            <scope>provided</scope>
        </dependency>

    </dependencies>
</project>

并且在MAVEN编译期间我收到此错误(大约100次,即在我的方法中使用的次数)

    [INFO] -------------------------------------------------------------
    [ERROR] COMPILATION ERROR : 
    [INFO] -------------------------------------------------------------
src\main\java\com\myproject\userprofile\BaseActivity.java:[52,43] error: package R does not exist
    Process finished with exit code 1

有关此错误的任何想法?在网络上,我要么找到关于类似错误输出的未解答的问题。我没有MAVEN的经验,所以我相信我在这里遗漏了一些东西。

4 个答案:

答案 0 :(得分:3)

R class是在编译期间由IDE构建的。 MAVEN找不到R类,因为默认情况下可以在build文件夹下找到该类。你需要添加这样的东西

<sourceDirectory>build</sourceDirectory>
<outputDirectory>target</outputDirectory>

告诉MAVEN你在build文件夹下有一些资源文件,并且你想让它们可以编译,所以把它们添加到你项目下的目标文件夹下。

现在我有了

build
  |----res
  |----src
src
  |----main
       |----java
       |----res 
target

答案 1 :(得分:0)

快速浏览后,我相信你错过了build元素。 Maven正在使用当前源构建项目,R和其他gen类尚未生成。至少你需要像(dependencies标签之后):

<build>
    <finalName>${project.artifactId}</finalName>
    <sourceDirectory>src</sourceDirectory>
    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>com.jayway.maven.plugins.android.generation2</groupId>
                <artifactId>android-maven-plugin</artifactId>
                <version>3.7.0</version>
                <extensions>true</extensions>
            </plugin>
        </plugins>
    </pluginManagement>
    <plugins>
        <plugin>
            <groupId>com.jayway.maven.plugins.android.generation2</groupId>
            <artifactId>android-maven-plugin</artifactId>
            <configuration>
                <sdk>
                    <!-- platform or api level (api level 16 = platform 4.1)-->
                    <platform>16</platform>
                </sdk>
            </configuration>
        </plugin>
    </plugins>
</build>

此外,包装必须为apk

<packaging>apk</packaging>

我强烈建议您开始阅读Android Maven documentation以及samples

答案 2 :(得分:0)

如果您修改了由 archetype:generate 生成的包名称,可能会发生此错误,对我来说,我使用android-quickstart生成模块结构:

mvn archetype:generate \
    -DarchetypeArtifactId=android-quickstart \
    -DarchetypeGroupId=de.akquinet.android.archetypes \
    -DarchetypeVersion=1.0.11 \
    -DgroupId=com.yy.android.gameLibs \
    -DartifactId=sample

akquient建议我使用“com.yy.android.gameLibs”作为包名,我接受了,我编译这个模块成功并且工作了。之后,我将包名更改为“com.yy.android.sample”也改变了Androidmenifest.xml包属性,因此模块报告该错误,我自己跟回生成命令和选择包名来解决这个问题。 / p>

答案 3 :(得分:0)

将包装修改为apklib,如下所示:

<packaging>apklib</packaging>

并在pom.xml末尾添加构建目标,如下所示:

<dependencies>
    <!--Android deps -->
    <dependency>
        <groupId>com.google.android</groupId>
        <artifactId>android</artifactId>
        <version>4.0.1.2</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

<build>        
    <plugins>
        <plugin>
            <groupId>com.jayway.maven.plugins.android.generation2</groupId>
            <artifactId>android-maven-plugin</artifactId>
            <version>3.8.1</version>
            <configuration>
                <sdk>
                    <platform>17</platform>
                </sdk>
            </configuration>
            <extensions>true</extensions>
        </plugin>
    </plugins>
</build>