Java 从外部jar文件(不在maven工件中)编译带有类的maven项目

Java 从外部jar文件(不在maven工件中)编译带有类的maven项目,java,maven,jar,Java,Maven,Jar,我对java有些陌生,对maven也很陌生。我可能会不恰当地使用一些术语 在我开发我使用maven构建的项目时,由于我需要的类不是核心java语言的一部分,我在我的pom.xml中添加了一个适当的部分(通常是从mvnbrowser.com复制的,我对它没有很好的理解),并且我能够使用我想要的类。效果很好 现在我遇到了一个我想要使用的java类,它显然在maven工件中不可用。它是与android SDK一起发布的com.android.sdklib.build.ApkBuilder。我编写了一个

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

在我开发我使用maven构建的项目时,由于我需要的类不是核心java语言的一部分,我在我的
pom.xml
中添加了一个适当的
部分(通常是从mvnbrowser.com复制的,我对它没有很好的理解),并且我能够使用我想要的类。效果很好

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

现在,当我将我的工作代码复制到maven项目中,并尝试使用
mvn项目构建时,我得到
包com.android.sdklib.build在导入行上不存在
错误,并且
找不到symbol:class ApkBuilder
错误,我指的是
ApkBuilder

环顾网络,我在这里找到了安卓maven插件。它让我在这里参考了maven android sdk部署器。这些线索一开始听起来很有希望,但据我所知,它们的目的是使用maven开发android应用程序,这不是我想要做的。我只想让我的java程序操作android
apk
文件,但我的java程序本身不能在android设备上运行。另外,android SDK是为linux而设计的,而不是我正在使用的FreeBSD,因此我无法遵循
maven android SDK deployer
的安装说明。我还发现了一个名为
maven-apkbuilder-plugin
的工件,但这似乎也是为了创建android应用程序,我没有看到相关文档。所以我没有追查这些线索

看起来最简单的方法就是让编译器在运行
mvn包时在我的
jre/lib/ext
文件夹中查找
sdklib.jar
文件。但也许这不是办法。或者我可以对我的
pom.xml
做一个简单的更改,这将导致编译器找到
sdklib.jar
。我在上查看了pom文档,但没有找到这样做的方法。无论如何,我相信至少有一个解决方案;我只是(还)不知道


我有什么选择?在我的maven构建项目中使用
ApkBuilder
类的最佳方式是什么?我应该读什么才能让我自己回答这个问题?谢谢

如果您只是尝试引用jar,最简单的解决方案可能是手动将jar添加到本地存储库中。有关详细信息,请参阅

简而言之:

mvn install:install-file       \
    -Dfile=<path-to-file>      \
    -DgroupId=<group-id>       \
    -DartifactId=<artifact-id> \
    -Dversion=<version>        \
    -Dpackaging=jar
mvn安装:安装文件\
-D文件=\
-DgroupId=\
-DartifactId=\
-D版本=\
-dpackage=jar
您可以对
组id
工件id
版本使用您想要的任何东西,但它们应该与您在回购协议中所期望的类似

因为您实际上并没有创建Android项目,所以这可能就足够了


我会这样问这个问题

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


(巧合的是,它和它的较短变体应该会出现您“应该”阅读的链接,以回答您的最后一个问题:)

您已经正确地确定了问题的根源——类路径中缺少的JAR。强制输入jre/lib/ext
并不理想。尝试研究一些Maven+Android开发工具(我对Android开发一无所知)。M2e Android()似乎很有趣。它声称“它将Maven依赖关系管理的力量引入ADT”