【问题标题】:Compiling a maven project with class from external jar file (that is not in a maven artifact)使用外部 jar 文件中的类编译 maven 项目(不在 maven 工件中)
【发布时间】:2011-11-26 00:03:04
【问题描述】:

我对 java 有点陌生,对 maven 也很陌生。我可能会不完美地使用一些术语。

当我开发我使用 maven 构建的项目时,因为我需要不属于核心 java 语言的类,所以我在 pom.xml 中添加了一个适当的 <dependency> 部分(通常从 mvnbrowser.com 复制而我并没有真正理解它),并且我已经能够使用我想要的类。效果很好。

现在我遇到了一个我想使用的 java 类,它显然在 maven 工件中不可用。它是com.android.sdklib.build.ApkBuilder,它与android SDK 一起分发。我写了一个独立的java程序来让我的代码工作;我用javac 编译它,而不是用maven 编译,效果很好。为此,我将包含我想要的类sdklib.jar 的jar 文件放入我的jre/lib/ext 目录(在FreeBSD 机器上为/usr/local/jdk1.6.0/jre/lib/ext),我的import com.android.sdklib.build.ApkBuilder 行编译得很好,我可以参考@987654333 @ 并毫无问题地使用它。

现在,当我将我的工作代码复制到我的 maven 项目中并尝试使用 mvn project 构建时,我在导入行收到 package com.android.sdklib.build does not exist 错误,在我引用 ApkBuilder 的地方出现 cannot find symbol: class ApkBuilder 错误。

环顾网络,我在这里找到了android-maven-pluginhttp://code.google.com/p/maven-android-plugin/。它在这里将我推荐给maven-android-sdk-deployerhttps://github.com/mosabua/maven-android-sdk-deployer。这些线索起初听起来很有希望,但据我所知,它们的目的是使用 maven 开发 android 应用程序,这不是我想要做的。我只想让我的 java 程序操作 android apk 文件,但我的 java 程序本身不能在 android 设备上运行。此外,android SDK 可以与 linux 一起使用,而不是我正在使用的 FreeBSD,所以我无法按照maven-android-sdk-deployer 的安装说明进行操作。我还发现了一个名为 maven-apkbuilder-plugin 的工件,但这似乎也是为了创建 android 应用程序,我没有看到它的文档。所以我没有追查这些线索。

似乎最简单的事情就是让编译器在运行mvn package 时在我的jre/lib/ext 文件夹中查找sdklib.jar 文件。但也许这不是要走的路。或者我可以对我的pom.xml 进行一个简单的更改,这将导致编译器找到sdklib.jar。我查看了http://maven.apache.org/pom.html#Build_Settings 的 pom 文档,但没有找到办法。无论如何,我确信至少有一种解决方案;我只是不知道(现在)。

我有哪些选择?在我的 Maven 构建项目中使用 ApkBuilder 类的最佳方法是什么?我应该阅读哪些内容才能让我自己回答这个问题?谢谢!!

【问题讨论】:

  • 您已正确识别出问题的根源——类路径中缺少 JAR。强制喂食jre/lib/ext 并不理想。尝试研究一些 Maven+Android 开发工具(我对 Android 开发一无所知)。 M2e-Android (rgladwell.github.com/m2e-android) 似乎很有趣。它声称“它将 Maven 依赖管理的力量带入了 ADT”

标签: java maven jar


【解决方案1】:

如果您只是想引用 jar,最简单的解决方案可能是手动将 jar 添加到本地存储库。详情请见here

简而言之:

mvn install:install-file       \
    -Dfile=<path-to-file>      \
    -DgroupId=<group-id>       \
    -DartifactId=<artifact-id> \
    -Dversion=<version>        \
    -Dpackaging=jar

可以group-idartifact-idversion 使用任何你想要的东西,但它们应该类似于你所期望的东西,如果它在repo 中可用的话。

由于您实际上并没有创建 Android 项目,因此这可能就足够了。


这就是我提出问题的方式。

如何在我的 Maven 构建中使用 Maven 存储库中不可用的库?

(巧合的是,那个,以及它的较短变体,应该会打开你“应该”阅读的链接,以回答你的最后一个问题:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-21
    • 2010-10-19
    • 1970-01-01
    • 2017-09-12
    • 2014-07-12
    相关资源
    最近更新 更多