2013-05-18 139 views
5

我認爲IntelliJ在生成R.java文件時存在一些問題,這導致了AndroidAnnotations中的問題,因爲它無法解析我的資源ID佈局。AndroidAnnotations處理在IntelliJ中失敗,因爲沒有生成R.java

這裏是我的活動:

package com.airlocksoftware.canvastest; 

import android.app.Activity; 
import android.os.Bundle; 
import com.googlecode.androidannotations.annotations.EActivity; 

@EActivity(R.layout.main) 
public class MyActivity extends Activity { 
    /** 
    * Called when the activity is first created. 
    */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
    } 
} 

什麼奇怪的是,即使我註釋掉的註釋,並做setContentView(R.layout.main),它工作得很好,即使R.java從未進口。

順便說一句,佈局只是一個簡單的「你好世界」。沒有什麼奇怪的去那裏。

無論我做什麼,我都無法使AndroidAnnotations生成CanvasActivity_.java。我的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/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>com.airlocksoftware.canvastest</groupId> 
    <artifactId>CanvasTest</artifactId> 
    <version>1.0-SNAPSHOT</version> 

    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     <android.version>4.2.2_r2</android.version> 
     <android.platform>17</android.platform> 
     <androidannotations.version>2.7.1</androidannotations.version> 
     <java.version>1.6</java.version> 
    </properties> 

    <repositories> 
     <repository> 
      <id>local-repo</id> 
      <url>file:///${env.HOME}/.m2/repository</url> 
     </repository> 
    </repositories> 

    <dependencies> 
     <dependency> 
      <groupId>android</groupId> 
      <artifactId>android</artifactId> 
      <version>${android.version}</version> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>com.googlecode.androidannotations</groupId> 
      <artifactId>androidannotations</artifactId> 
      <version>${androidannotations.version}</version> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>com.googlecode.androidannotations</groupId> 
      <artifactId>androidannotations-api</artifactId> 
      <version>${androidannotations.version}</version> 
     </dependency> 
    </dependencies> 

    <build> 
     <plugins> 
      <plugin> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>2.5.1</version> 
       <configuration> 
        <source>${java.version}</source> 
        <target>${java.version}</target> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>com.jayway.maven.plugins.android.generation2</groupId> 
       <artifactId>android-maven-plugin</artifactId> 
       <version>3.4.0</version> 
       <configuration> 
        <sdk> 
         <platform>${android.platform}</platform> 
        </sdk> 
        <undeployBeforeDeploy>true</undeployBeforeDeploy> 
       </configuration> 
       <extensions>true</extensions> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

註釋處理set up like shown in this screenshot.

annotation processing

基本上我安裝的處理器路徑指向我的本地Maven回購的jar文件,爲described here.

項目來源設置like shown in this screenshot.

project sources

無論我如何創建/重建項目,gen/aa中都沒有顯示出來(因此我無法引用CanvasActivity_.java)我從項目根目錄運行了mvn clean install,該堆棧跟蹤失敗。

INFO] BUILD FAILURE 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: 4.363s 
[INFO] Finished at: Sat May 18 15:53:06 MDT 2013 
[INFO] Final Memory: 11M/81M 
[INFO] ------------------------------------------------------------------------ 
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.5.1:compile (default-compile) on project CanvasProto: Compilation failure: Compilation failure: 
[ERROR] /Users/matthewbbishop/Clients/proto/CanvasProto/src/main/java/com/airlocksoftware/CanvasProto/CanvasActivity.java:[6,38] cannot find symbol 
[ERROR] symbol : class R 
[ERROR] location: package com.airlocksoftware.CanvasProto 
[ERROR] /Users/matthewbbishop/Clients//proto/CanvasProto/src/main/java/com/airlocksoftware/CanvasProto/CanvasActivity.java:[11,12] package R does not exist 
[ERROR] /Users/matthewbbishop/Clients/proto/CanvasProto/src/main/java/com/airlocksoftware/CanvasProto/CanvasActivity.java:[14,15] package R does not exist 
[ERROR] error: Unexpected error. Please report an issue on AndroidAnnotations, with the following content: java.lang.RuntimeException: java.lang.reflect.InvocationTargetException 
[ERROR] at com.googlecode.androidannotations.helper.AnnotationHelper.extractAnnotationParameter(AnnotationHelper.java:293) 
[ERROR] at com.googlecode.androidannotations.helper.AnnotationHelper.extractAnnotationResIdValueParameter(AnnotationHelper.java:269) 
[ERROR] at com.googlecode.androidannotations.helper.IdValidatorHelper.resIdsExist(IdValidatorHelper.java:45) 
[ERROR] at com.googlecode.androidannotations.validation.EActivityValidator.validate(EActivityValidator.java:55) 
[ERROR] at com.googlecode.androidannotations.validation.ModelValidator.validate(ModelValidator.java:56) 
[ERROR] at com.googlecode.androidannotations.AndroidAnnotationProcessor.validateAnnotations(AndroidAnnotationProcessor.java:414) 
[ERROR] at com.googlecode.androidannotations.AndroidAnnotationProcessor.processThrowing(AndroidAnnotationProcessor.java:364) 
[ERROR] at com.googlecode.androidannotations.AndroidAnnotationProcessor.process(AndroidAnnotationProcessor.java:341) 
[ERROR] at com.sun.tools.javac.processing.JavacProcessingEnvironment.callProcessor(JavacProcessingEnvironment.java:627) 
[ERROR] at com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(JavacProcessingEnvironment.java:556) 
[ERROR] at com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:701) 
[ERROR] at com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:987) 
[ERROR] at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:727) 
[ERROR] at com.sun.tools.javac.main.Main.compile(Main.java:353) 
[ERROR] at com.sun.tools.javac.main.Main.compile(Main.java:279) 
[ERROR] at com.sun.tools.javac.main.Main.compile(Main.java:270) 
[ERROR] at com.sun.tools.javac.Main.compile(Main.java:87) 
[ERROR] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
[ERROR] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
[ERROR] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
[ERROR] at java.lang.reflect.Method.invoke(Method.java:597) 
[ERROR] at org.codehaus.plexus.compiler.javac.JavacCompiler.compileInProcess0(JavacCompiler.java:551) 
[ERROR] at org.codehaus.plexus.compiler.javac.JavacCompiler.compileInProcess(JavacCompiler.java:526) 
[ERROR] at org.codehaus.plexus.compiler.javac.JavacCompiler.compile(JavacCompiler.java:167) 
[ERROR] at org.apache.maven.plugin.AbstractCompilerMojo.execute(AbstractCompilerMojo.java:678) 
[ERROR] at org.apache.maven.plugin.CompilerMojo.execute(CompilerMojo.java:128) 
[ERROR] at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101) 
[ERROR] at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209) 
[ERROR] at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153) 
[ERROR] at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145) 
[ERROR] at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84) 
[ERROR] at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59) 
[ERROR] at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183) 
[ERROR] at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161) 
[ERROR] at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:319) 
[ERROR] at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156) 
[ERROR] at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537) 
[ERROR] at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196) 
[ERROR] at org.apache.maven.cli.MavenCli.main(MavenCli.java:141) 
[ERROR] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
[ERROR] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
[ERROR] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
[ERROR] at java.lang.reflect.Method.invoke(Method.java:597) 
[ERROR] at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290) 
[ERROR] at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230) 
[ERROR] at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409) 
[ERROR] at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352) 
[ERROR] Caused by: java.lang.reflect.InvocationTargetException 
[ERROR] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
[ERROR] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
[ERROR] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
[ERROR] at java.lang.reflect.Method.invoke(Method.java:597) 
[ERROR] at com.googlecode.androidannotations.helper.AnnotationHelper.extractAnnotationParameter(AnnotationHelper.java:287) 
[ERROR] ... 46 more 
[ERROR] Caused by: java.lang.annotation.AnnotationTypeMismatchException: Incorrectly typed data found for annotation element public abstract int com.googlecode.androidannotations.annotations.EActivity.value() (Found data of type int) 
[ERROR] at com.sun.tools.javac.model.AnnotationProxyMaker$ValueVisitor$1.generateException(AnnotationProxyMaker.java:243) 
[ERROR] at sun.reflect.annotation.AnnotationInvocationHandler.invoke(AnnotationInvocationHandler.java:56) 
[ERROR] at $Proxy16.value(Unknown Source) 
[ERROR] ... 51 more 

老實說我現在處於虧損狀態。如果有人知道該怎麼做,那會很棒。謝謝!

編輯:這裏是由IntelliJ生成的stub R.java。

/*___Generated_by_IDEA___*/ 

package com.airlocksoftware.canvastest; 

/* This stub is for using by IDE only. It is NOT the R class actually packed into APK */ 
public final class R { 
} 

回答

1

它,因爲你的pom.xml缺少以下:

<packaging>apk</packaging> 

沒有這個R.java文件將不會產生。

它添加到您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/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>com.airlocksoftware.canvastest</groupId> 
    <artifactId>CanvasTest</artifactId> 
    <version>1.0-SNAPSHOT</version> 

    <packaging>apk</packaging> 

    /* ... */ 
    /* rest are fine */ 
    /* ... */ 
+0

好的,真棒。現在它正在使用maven從命令行正確構建。但IntelliJ仍然沒有運行註釋處理,所以生成的文件永遠不會像gen/aa那樣最終結束。有任何想法嗎? – liftdeadtrees

+0

Hi @ liftdeadtrees,是的IntelliJ的IDE編譯器正在進行中,我有很多問題,它正確地檢測註釋。大多數情況下,我必須按照屏幕截圖中指定的方式編輯「Annotation Processors」,並且必須將*完整路徑*賦予JAR,而不是相對路徑。嘗試還檢查「從項目類路徑獲得處理器」,看看是否有效...... – Subhas

+0

我甚至不知道這是你的意思,但我把路徑從〜/ .m2/rest/of /路徑/Users/matthewbbishop/.m2/rest/of/path,現在出於一些非常奇怪的原因,它的工作。我非常感謝你的幫助。 – liftdeadtrees

0

這很奇怪。你的maven配置看起來很棒。至少,它應該通過Maven編譯好... 我不認爲這是因爲錯誤應該是不同的,但是你更新到最後一個Android SDK 22嗎?

+0

我剛剛更新,但問題依然存在。我在問題末尾添加了來自gen文件夾的R.java存根。我不確定這是IntelliJ應該如何工作,或者如果這導致AndroidAnnotations的問題? – liftdeadtrees