【问题标题】:Eclipse compilation error when depending on external apklib依赖外部 apklib 时的 Eclipse 编译错误
【发布时间】:2014-02-02 05:15:15
【问题描述】:

我有几个 android 库项目正在尝试转换为 Maven。

我遇到了 mvn clean install 成功但在 Eclipse 中存在导入问题,好像 project2 apklib 中的类不在 project1 的类路径中。

第一个项目 POM.xml

<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>
<artifactId>android-clientsdk</artifactId>
<packaging>apklib</packaging>

<parent>
    <groupId>com.company.client</groupId>
    <artifactId>company-parent</artifactId>
    <version>1.0.0-SNAPSHOT</version>
</parent>

<build>
    <sourceDirectory>src</sourceDirectory>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
        </plugin>
        <plugin>
            <artifactId>maven-source-plugin</artifactId>
            <configuration>
                <attach>true</attach>
            </configuration>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>jar</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>com.jayway.maven.plugins.android.generation2</groupId>
            <artifactId>android-maven-plugin</artifactId>
            <extensions>true</extensions>
            <configuration>
                <sdk>
                    <path>${android.sdk.path}</path>
                    <platform>${android.sdk.platform}</platform>
                </sdk>
                <!-- <deleteConflictingFiles>true</deleteConflictingFiles> -->
            </configuration>
        </plugin>
    </plugins>
    <pluginManagement>
        <plugins>
            <!--This plugin's configuration is used to store Eclipse m2e settings 
                only. It has no influence on the Maven build itself. -->
            <plugin>
                <groupId>org.eclipse.m2e</groupId>
                <artifactId>lifecycle-mapping</artifactId>
                <version>1.0.0</version>
                <configuration>
                    <lifecycleMappingMetadata>
                        <pluginExecutions>
                            <pluginExecution>
                                <pluginExecutionFilter>
                                    <groupId>com.jayway.maven.plugins.android.generation2</groupId>
                                    <artifactId>android-maven-plugin</artifactId>
                                    <versionRange>[3.7.0,)</versionRange>
                                    <goals>
                                        <goal>generate-sources</goal>
                                        <goal>consume-aar</goal>
                                        <goal>proguard</goal>
                                    </goals>
                                </pluginExecutionFilter>
                                <action>
                                    <ignore />
                                </action>
                            </pluginExecution>
                            <pluginExecution>
                                <pluginExecutionFilter>
                                    <groupId>org.apache.maven.plugins</groupId>
                                    <artifactId>maven-dependency-plugin</artifactId>
                                    <versionRange>[2.1,)</versionRange>
                                    <goals>
                                        <goal>copy-dependencies</goal>
                                    </goals>
                                </pluginExecutionFilter>
                                <action>
                                    <ignore />
                                </action>
                            </pluginExecution>
                        </pluginExecutions>
                    </lifecycleMappingMetadata>
                </configuration>
            </plugin>
        </plugins>
    </pluginManagement>
</build>
<dependencies>
    <dependency>
        <groupId>com.google.android</groupId>
        <artifactId>android</artifactId>
        <scope>provided</scope>
    </dependency>
</dependencies>

<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>
<artifactId>android-clientelement</artifactId>
<packaging>apklib</packaging>

<parent>
    <groupId>com.company.client</groupId>
    <artifactId>company-parent</artifactId>
    <version>1.0.0-SNAPSHOT</version>
</parent>

<build>
    <sourceDirectory>src</sourceDirectory>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
        </plugin>
        <plugin>
            <artifactId>maven-source-plugin</artifactId>
            <configuration>
                <attach>true</attach>
            </configuration>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>jar</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>com.jayway.maven.plugins.android.generation2</groupId>
            <artifactId>android-maven-plugin</artifactId>
            <extensions>true</extensions>
            <configuration>
                <sdk>
                    <path>${android.sdk.path}</path>
                    <platform>${android.sdk.platform}</platform>
                </sdk>
                <!-- <deleteConflictingFiles>true</deleteConflictingFiles> -->
            </configuration>
        </plugin>
    </plugins>
    <pluginManagement>
        <plugins>
            <!--This plugin's configuration is used to store Eclipse m2e settings 
                only. It has no influence on the Maven build itself. -->
            <plugin>
                <groupId>org.eclipse.m2e</groupId>
                <artifactId>lifecycle-mapping</artifactId>
                <version>1.0.0</version>
                <configuration>
                    <lifecycleMappingMetadata>
                        <pluginExecutions>
                            <pluginExecution>
                                <pluginExecutionFilter>
                                    <groupId>com.jayway.maven.plugins.android.generation2</groupId>
                                    <artifactId>android-maven-plugin</artifactId>
                                    <versionRange>[3.7.0,)</versionRange>
                                    <goals>
                                        <goal>generate-sources</goal>
                                        <goal>consume-aar</goal>
                                        <goal>proguard</goal>
                                    </goals>
                                </pluginExecutionFilter>
                                <action>
                                    <ignore />
                                </action>
                            </pluginExecution>
                            <pluginExecution>
                                <pluginExecutionFilter>
                                    <groupId>org.apache.maven.plugins</groupId>
                                    <artifactId>maven-dependency-plugin</artifactId>
                                    <versionRange>[2.1,)</versionRange>
                                    <goals>
                                        <goal>copy-dependencies</goal>
                                    </goals>
                                </pluginExecutionFilter>
                                <action>
                                    <ignore />
                                </action>
                            </pluginExecution>
                        </pluginExecutions>
                    </lifecycleMappingMetadata>
                </configuration>
            </plugin>
        </plugins>
    </pluginManagement>
</build>
<dependencies>
    <dependency>
        <groupId>com.google.android</groupId>
        <artifactId>android</artifactId>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>com.company.client</groupId>
        <artifactId>android-clientsdk</artifactId>
        <version>1.0.0-SNAPSHOT</version>
        <type>apklib</type>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.0.1</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-core</artifactId>
        <version>2.0.1</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-annotations</artifactId>
        <version>2.0.1</version>
    </dependency>
</dependencies>

技术人员:

  • 我正在使用 Eclipse Kepler。
  • 我正在使用最新的 Android Configurator for M2E(取自 eclipse 市场)

我的问题:

  1. 在依赖 apklib 时,我们是否应该在 Eclipse 中看到这种依赖关系的任何证据(例如从该库编译的 .class)?
  2. 为什么 Eclipse 无法从依赖的 apklib 中的包中找到导入?

【问题讨论】:

  • 我有一个类似的问题:虽然在 eclipse 中一切看起来都很好(导入可以解决等 -> 转到项目属性 -> android -> 添加 lib,并确保 lib 在 eclipse 中打开在同一个工作区中),生成的 apk 不包含 apklib 内容............

标签: android maven m2e android-maven-plugin


【解决方案1】:

您必须在 Eclipse 工作区中导入您的 APKlib,然后将其链接到您的主应用程序项目(项目属性 > Android > 添加库并选择您的 APKLib 项目)

有时,如果您对 maven 项目执行清理或更新,Eclipse 会丢失您的 apklib 链接,您必须重新添加它。..

【讨论】:

  • 我尝试了这个解决方案,但没有解决问题。这可能是因为 APKLib 是一个 Maven 项目,它不是标准的 Android 文件结构。 (bin 不包含类)。
  • 您的 APKlib 在您的工作区中未被识别为 maven 和 android 项目?无论如何,就我而言,我在我的 POM 文件中添加了我的 APKLib 模块作为依赖项。你可以尝试添加它吗?
  • APKLib 是我的 POM.xml 中的一个依赖项,不仅如此,Maven 确实使用 mvn clean install 成功构建了这个项目。但是当我想在 Eclipse 中编码时,我发现导入失败了。您是否设法在 Eclipse 中使用 APKLib 中的类?
  • 是的,我做到了。但就我而言,APKLib maven 模块也被识别为 Android 模块。因此,当我将它作为 Android 库链接时,Eclipse 工作正常。在 Eclipse 的 Package Explorer 中,能看到模块图标中有一个小“M”和一个小“A”吗?
  • 我的所有项目都标有“A”和“M”。当我转到项目属性 > Java 构建路径 > 库选项卡 > Android 依赖项时,我看到了 jar。它指向位于 APKLib 项目 bin 文件夹下的 jar。众所周知,当我们的项目被定义为 maven 时,所有类都是在类中创建的,我们应该引用的 jar 是 Target 文件夹下的那个。我打开了我依赖的 jar,但缺少所需的类。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-10
  • 2017-10-27
  • 2015-10-03
  • 2019-12-05
相关资源
最近更新 更多