Не получать обработанные (сгенерированные) источники аннотаций, скомпилированные в apk, с использованием maven

Я пытаюсь использовать Maven и androidannotations для создания своего apk, но независимо от какой-либо IDE (на самом деле я использую IntelliJ IDEA, а не Eclipse, но я хотел бы, чтобы он был полностью независимым от IDE, чтобы он также отлично работал на любом сервере сборки).

Аннотации, кажется, обрабатываются должным образом, но они не компилируются в apk, в чем я сейчас застрял.

Я пытаюсь использовать раздел <includes> в maven-compiler-plugin, и путь должен быть правильным - он существует, а также содержит обработанный, сгенерированный аннотацию, класс java, который является основным действием Android, но с суффиксом подчеркивания (_).

На вики-странице есть описание того, как использовать Maven+Eclipse, но оно слишком сильно привязано к Eclipse IDE. https://github.com/excilys/androidannotations/wiki/Building-Project-Maven-Eclipse, так что это не поможет мне решить проблему.

Это мой 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.mycompany</groupId>
    <artifactId>de-mycompany-myproject</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>apk</packaging>
    <name>com-mycompany-base-myproject</name>

    <prerequisites>
        <maven>2.2.1</maven>
    </prerequisites>

    <properties>
        <platform.version>2.3.3</platform.version>
    </properties>

    <dependencies>

        <dependency>
            <groupId>com.google.android</groupId>
            <artifactId>android</artifactId>
            <version>${platform.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.2.2</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>com.googlecode.androidannotations</groupId>
            <artifactId>androidannotations</artifactId>
            <version>2.6</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>com.googlecode.androidannotations</groupId>
            <artifactId>androidannotations</artifactId>
            <classifier>api</classifier>
            <version>2.6</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>

            <plugin>
                <groupId>com.jayway.maven.plugins.android.generation2</groupId>
                <artifactId>android-maven-plugin</artifactId>
                <version>3.1.1</version>
                <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>10</platform>
                    </sdk>
                    <undeployBeforeDeploy>true</undeployBeforeDeploy>
                </configuration>
                <extensions>true</extensions>
            </plugin>

            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.3.2</version>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                    <includes>
                        <include>${project.basedir}/target/generated-sources/apt/**</include>
                        <!--<include>target/generated-sources/apt/**</include>-->
                    </includes>
                </configuration>
            </plugin>

            <plugin>
                <artifactId>versions-maven-plugin</artifactId>
                <groupId>org.codehaus.mojo</groupId>
                <version>1.3.1</version>
            </plugin>


            <plugin>
                <groupId>org.bsc.maven</groupId>
                <artifactId>maven-processor-plugin</artifactId>
                <version>2.0.5</version>
                <executions>
                    <execution>
                        <id>process</id>
                        <goals>
                            <goal>process</goal>
                        </goals>
                        <phase>generate-sources</phase>
                        <configuration>
                            <processors>
                                <processor>com.googlecode.androidannotations.AndroidAnnotationProcessor</processor>
                            </processors>
                        </configuration>
                    </execution>
                </executions>
                <dependencies/>
            </plugin>

        </plugins>
    </build>

</project>

mvn install даже показывает мне вариант компилятора -s с правильным путем:

[INFO] javac option: -proc:only
[INFO] javac option: -processor
[INFO] javac option: com.googlecode.androidannotations.AndroidAnnotationProcessor
[INFO] javac option: -d
[INFO] javac option: /Users/myuser/path/to/com.mycompany.myproject/target/classes
[INFO] javac option: -s
[INFO] javac option: /Users/myuser/path/to/com.mycompany.myproject/target/generated-sources/apt
[INFO] diagnostic Note: Starting AndroidAnnotations annotation processing
[INFO] diagnostic warning: Supported source version 'RELEASE_6' from annotation processor 'com.googlecode.androidannotations.AndroidAnnotationProcessor' less than -source '1.7'
[INFO] diagnostic Note: Dummy source file: file:///Users/path/to/com.mycompany.myproject/target/generated-sources/apt/dummy1341816057285.java
[INFO] diagnostic Note: AndroidManifest.xml file found: /Users/myuser/path/to/com.mycompany.myproject/AndroidManifest.xml
[INFO] diagnostic Note: Number of files generated by AndroidAnnotations: 1
[INFO] diagnostic Note: Generating source file: com.mycompany.myproject.activity.HelloAndroidActivity_

(Полный журнал mvn install находится здесь: http://pastebin.com/6dQkcNXD)

Но все равно запуск apk не работает:

E/AndroidRuntime( 6942): Caused by: java.lang.ClassNotFoundException: com.mycompany.myproject.activity.HelloAndroidActivity_ in loader dalvik.system.PathClassLoader

а обработанная аннотация HelloAndroidActivity_ находится не внутри apk/classes.dex.


person Mathias Conradt    schedule 09.07.2012    source источник


Ответы (2)


Нашел проблему: <extensions>true</extensions> отсутствовал под maven-compiler-plugin:

   <plugin>
       <artifactId>maven-compiler-plugin</artifactId>
       <version>2.3.2</version>
       <configuration>
           <source>1.6</source>
           <target>1.6</target>
           <includes>
               <include>${project.basedir}/target/generated-sources/apt/**</include>
           </includes>
       </configuration>
   <extensions>true</extensions>
   </plugin>              
person Mathias Conradt    schedule 09.07.2012
comment
Что именно означает тег «расширения»? - person Wojciech Górski; 06.12.2012
comment
См. эту ссылку: groups.google.com /forum/?fromgroups=#!topic/ и maven.apache.org/pom .html#Расширения - person Mathias Conradt; 06.12.2012

После дальнейших исследований я определил, что мой первоначальный ответ был неправильным.

Проблема на самом деле заключается в сгенерированном файле .classpath. См.: https://gist.github.com/cwc/5224145.

В этом примере broken_cp.xml приводит к тому, что обработанные аннотации не включаются в APK при использовании в качестве .classpath. Изменение его содержимого на working_cp.xml и обновление проекта (запрос на сборку) немедленно устраняет проблему с APK, и я могу успешно запустить свое приложение для Android из Eclipse.

Неработающая форма файла classpath восстанавливается каждый раз, когда я использую пункт меню проекта Maven > Update Project... для перезагрузки файлов POM. Я работаю над этой проблемой, уделяя пристальное внимание обновлениям файла .classpath и следя за тем, чтобы не зафиксировать неработающую версию.

person cwc    schedule 22.03.2013