如何在项目的库源中直接添加本地jar文件(尚未成为Maven存储库的一部分)?
在实验/快速和肮脏的模拟开发阶段,Maven2让我发疯.
我有一个pom.xml文件定义了我想要使用的web-app框架的依赖项,我可以从该文件快速生成启动项目.但是,有时我想链接到尚未pom.xml定义文件的第三方库,所以不是pom.xml手动创建第三方库的文件并安装它,并将依赖项添加到我的pom.xml,我只是想告诉Maven:"除了我定义的依赖项,还要包含任何罐子/lib."
看起来这应该很简单,但如果是这样,我就会遗漏一些东西.
任何关于如何做到这一点的指针都非常感谢.除此之外,如果有一种简单的方法将maven指向一个/lib目录并轻松创建一个pom.xml所有封闭的jar映射到单个依赖项,然后我可以一次命名/安装和链接就足够了.
我已经在Stack Overflow上找到了如何在项目中包含第三方JAR而不将其安装到"本地存储库"的答案:
我可以在没有安装的情况下将jar添加到maven 2 build classpath吗?
但是,当我使用Maven Shade插件创建包含项目所有依赖项的JAR时,第三方JAR不会自动包含在内.
如何让Maven Shade插件将这样的第三方JAR添加到着色的JAR中?
根据得到的答案,我做到了.我做的是,将这个片段添加到我的pom.xml的开头:
<repositories>
<repository>
<id>repo</id>
<url>file://${basedir}/repo</url>
</repository>
</repositories>
Run Code Online (Sandbox Code Playgroud)
然后为我的项目添加了一个依赖项,也添加到pom.xml:
<dependencies>
<dependency>
<groupId>dummy</groupId>
<artifactId>dummy</artifactId>
<version>0.0.0</version>
<scope>compile</scope>
</dependency>
</dependencies>
Run Code Online (Sandbox Code Playgroud)
然后运行命令行将包添加到'repo':
mvn org.apache.maven.plugins:maven-install-plugin:2.3.1:install-file
-Dfile=<my-jar>.jar -DgroupId=dummy -DartifactId=dummy
-Dversion=0.0.0 -Dpackaging=jar -DlocalRepositoryPath=`pwd`/repo/
Run Code Online (Sandbox Code Playgroud)
(不确定repo路径是否需要完整路径,但不想冒险.)
repo子目录的内容现在是:
repo/dummy/dummy/0.0.0/dummy-0.0.0.jar
repo/dummy/dummy/0.0.0/dummy-0.0.0.pom
repo/dummy/dummy/maven-metadata-local.xml
Run Code Online (Sandbox Code Playgroud)
现在我可以将其检入版本控制,并且没有本地或远程依赖项.
我有一个基于 maven 的 spring boot 项目。
我必须包含另一个团队提供的本地 jar。所以我遵循以下接受的答案:How to include local jar files in Maven project
所以我使用:
<dependency>
<groupId>com.netease</groupId>
<artifactId>thrift</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/prome-thrift-client-1.0.0.jar</systemPath>
</dependency>
Run Code Online (Sandbox Code Playgroud)
这在 IDEA 中运行良好。但是当我尝试使用以下命令运行包 jar 时:
mvn clean package
java -jar target/prome-data.jar
Run Code Online (Sandbox Code Playgroud)
堆栈跟踪就像:
....
....
Caused by: java.lang.ClassNotFoundException: com.netease.thrift.client.ThriftRpcClient
Run Code Online (Sandbox Code Playgroud)
有什么我想念的吗
我正在通过Maven与Apache Spark一起工作,并且尝试通过包含第3方jar并尝试利用其中的某些方法来修改源。
使用编译Spark项目时出现以下错误
mvn -Dhadoop.version=2.2.0 -Dscala-2.11 -DskipTests clean package
Run Code Online (Sandbox Code Playgroud)
not found: object edu
[ERROR] import edu.xxx.cs.aggr._
Run Code Online (Sandbox Code Playgroud)
我修改ResultTask.scala为包含导入语句。因此,maven无法找到我要使用的jar并将其与项目链接。
我已经将依赖项添加到pom.xml文件中,如下所示:
<dependency>
<groupId>edu.xxx.cs</groupId>
<artifactId>aggr</artifactId>
<version>0.99</version>
<scope>system</scope>
<systemPath>${basedir}/aggr.jar</systemPath>
</dependency>
Run Code Online (Sandbox Code Playgroud)
我尝试链接的jar文件与spark pom.xml文件位于同一目录中。我将此依赖项添加到pom.xml。我将其插入pom.xml文件中的2个现有依赖关系之间。我不确定出什么问题,但是我现在想立即关联该jar,以便可以使用其中的方法。我也不确定我是否应该使用特定于groupId,artifactId和版本的任何东西。edu.xxx.cs.aggr是包含其他源文件和软件包的根软件包。我将不胜感激任何帮助。
更新
我用了
mvn install:install-file -Dfile=<path-to-file> -DgroupId=edu.xxx.cs -DartifactId=aggr -Dversion=0.99 -Dpackaging=jar to install the jar to the .m2 repo. I checked the repo to see if it was installed, and it was.
Run Code Online (Sandbox Code Playgroud)
我将pom.xml中的依赖项更改为
<dependency>
<groupId>edu.purdue.cs</groupId>
<artifactId>aggr</artifactId>
<version>0.99</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
我仍然遇到相同的错误。