Java 从外部jar文件(不在maven工件中)编译带有类的maven项目
我对java有些陌生,对maven也很陌生。我可能会不恰当地使用一些术语 在我开发我使用maven构建的项目时,由于我需要的类不是核心java语言的一部分,我在我的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。我编写了一个
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程序操作androidapk
文件,但我的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”