使用Maven和Dagger生成的类在Eclipse中对ADT不可见

时间:2014-06-21 14:40:37

标签: java android eclipse maven dagger

我已经设置了一个项目,Dagger已添加到classpath,包含所有M2E连接器等。在我的pom.xml中我有

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <dependencies>
                <dependency>
                    <groupId>com.squareup.dagger</groupId>
                    <artifactId>dagger</artifactId>
                    <version>1.2.1</version>
                </dependency>
                <dependency>
                    <groupId>com.squareup.dagger</groupId>
                    <artifactId>dagger-compiler</artifactId>
                    <version>1.2.1</version>
                    <optional>true</optional>
                </dependency>
                <dependency>
                    <groupId>com.jakewharton</groupId>
                    <artifactId>butterknife</artifactId>
                    <version>5.1.0</version>
                </dependency>
            </dependencies>
        </plugin>

所有内容也都添加到Eclipse项目设置中,所以当我在Dagger模块中更改某些内容时,它会自动反映在生成的Java文件中

target/generated-sources/annotations

此文件夹也作为源文件夹附加到项目中。

到目前为止一切顺利,当我在模拟器上通过ADT运行应用程序时,我看到一个例外

06-21 09:51:17.983: E/AndroidRuntime(1207):
java.lang.RuntimeException: Unable to create application XXX:
java.lang.IllegalStateException: Module adapter for class XXX could not be loaded.
Please ensure that code generation was run for this module.

据我了解,这意味着文件夹&#34; target / generated-sources / annotations&#34; ADT在尝试编译项目时不可见。

目前我有两个想法:

  • 将此文件夹添加到ADT的类路径
  • 生成文件到标准Android文件夹,以便ADT可以看到它们

不幸的是,我还没有找到如何做其中任何一个。 Dagger文档在这个主题上也有点过于简洁和模糊。

那么当你使用Maven和Dagger时,它通常如何在Eclipse中运行?

更新:我已经完成了&#34;可能重复的所有步骤&#34;上面的问题,但我的问题没有解决。我将再次声明:在构建期间创建文件,由于某种原因它们对模拟器不可见。

1 个答案:

答案 0 :(得分:3)

如果有人遇到同样的问题,我就是这样解决的。我在pom.xml中添加了下一行:

<build>
    <outputDirectory>bin/classes</outputDirectory>
...

这意味着在构建期间所有常用的东西都像往常一样继续进入“目标”文件夹,但是所有源文件夹中的所有类都转到“bin / classes”。必须必须才能使ADT正常工作。我不知道,如果ADT可以与任何其他文件夹一起使用,但默认情况下它不能。现在您可以右键单击项目并选择“Maven / Update Project ...”将所有输出文件夹设置为“bin / classes”。这解决了这个问题,ADT在具有所有必需类的模拟器上正确运行应用程序。