maven构建我的项目时无法从库项目的jar中找到类

Posted

技术标签:

【中文标题】maven构建我的项目时无法从库项目的jar中找到类【英文标题】:Cannot find the class from library project's jar when maven build my project 【发布时间】:2015-11-07 19:32:57 【问题描述】:

我下载了一个 3rd 方 android 库项目,该项目不包含 java 类文件,但在libs/ 文件夹下有一个 jar 文件:

libs/
    - CustomService.jar
res/
   -…
pom.xml

这个库项目可以 maven 构建到 apklib 存档。我构建了它并已将此存档安装到我的本地 maven 存储库中。

然后在我自己的Android项目中,添加了这个apklib项目的依赖:

<dependency>
   <groupId>com.custom.service</groupId>
   <artifactId>custom-service</artifactId>
   <type>apklib</type>
   <version>1.0</version>
 </dependency>

在我的 Java 代码中,我使用了 CustomService.jar 中的类,但是当我构建我的项目时,我不断收到以下错误:

[ERROR] package com.custom.service.user does not exist
[ERROR] location: class com.my.app.MyClass
[ERROR] /Users/Johon/MyApp/src/main/java/com/my/app/MyClass.java:[34,17] cannot find symbol
[ERROR] symbol:   variable UserService

上述错误抱怨它无法从库 apklib 存档中找到 UserService 类。然后,我通过命令查看了库jar文件的内容:

jar tf CustomService.jar

我看到该类在库项目的 CustomService.jar

com/custom/service/user/UserService.class

这个类在罐子里,为什么我得到错误呢????

【问题讨论】:

我怀疑现在有人能回答你的问题,因为现在几乎每个人都使用 gradle + .aar 而不是 maven + .apklib。 apklib 已弃用。尝试生成aar文件而不是simpligility.github.io/android-maven-plugin/aar.html,然后将依赖添加到aar 能否将有关安装 Custom-service.jar 的 Maven 日志分享到本地存储库?在我看来,依赖属性可能是错误的。 检查您的 Maven 设置文件。当你从控制台运行时,它可能会得到一个不同的 xml 文件。 您可以访问源文件吗?你也可以编译它! 【参考方案1】:

尝试添加范围:

<dependency>
   <groupId>com.custom.service</groupId>
   <artifactId>custom-service</artifactId>
   <type>apklib</type>
   <version>1.0</version>
   <scope>compile</scope>
 </dependency>

【讨论】:

编译范围在Maven中是默认的,所以添加它是没有效果的。【参考方案2】:

确保您的项目属于apk 类型或与apklib兼容的任何其他类型。默认jar 类型将忽略 apklib 依赖项。

<project>

    <modelVersion>4.0.0</modelVersion>

    <groupId>...</groupId>
    <artifactId>...</artifactId>
    <packaging>apk</packaging>
...
</project>

【讨论】:

以上是关于maven构建我的项目时无法从库项目的jar中找到类的主要内容,如果未能解决你的问题,请参考以下文章

IDEA maven中引入的依赖不自动导入项目

如何运行构建后生成的maven项目的jar文件?

自动化构建工具Maven

使用 Maven 2 构建可运行的 jar

在Maven构建期间找不到来自外部jar的类文件? [复制]

使用 Maven2 将多模块项目构建到单个 jar 中