在 Maven 项目中包含本地 jar 文件 - 找不到文件
Posted
技术标签:
【中文标题】在 Maven 项目中包含本地 jar 文件 - 找不到文件【英文标题】:Include local jar file in maven project - not finding file 【发布时间】:2016-11-17 21:12:22 【问题描述】:所以我试图将两个本地 jar 文件包含到我拥有的 Maven 项目中,但没有这样做。我已经尝试过解决这些线程中的解决方案:12,但它仍然没有真正起作用。以下是我的 pom.xml 文件的关键部分:
<repository>
<id>local-maven-repo</id>
<url>file://$basedir/resources</url>
</repository>
然后是依赖:
<dependency>
<groupId>edu.mlab.jar1</groupId>
<artifactId>jar1_local</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>edu.mlab.jar2</groupId>
<artifactId>jar2_local</artifactId>
<version>1.0</version>
</dependency>
两个 jar 文件分别在 edu.mlab.jar1
和 edu.mlab.jar2
处包含包声明,所以这就是我想要它们的地方。 jar 文件位于资源文件夹中,就在基本目录下。
这就是设置。现在,当我尝试mvn package
(mvn clean
之后)时,我收到以下错误
[ERROR] Failed to execute goal on project PROJECT: Could not resolve dependencies for project edu.mlab.project:PROJECT:war:1.0-SNAPSHOT: The following artifacts could not be resolved: edu.mlab.jar1:jar1_local:jar:1.0, edu.mlab.jar2:jar2_local:jar:1.0: Failure to find edu.mlab.jar1:jar1_local:jar:1.0 in file:///Users/mlab/Desktop/2016/project_web/resources was cached in the local repository, resolution will not be reattempted until the update interval of local-maven-repo has elapsed or updates are forced -> [Help 1]
我不太确定出了什么问题,因为我的 jar1 和 jar2 正好在资源文件夹中。另外,我尝试过使用系统范围导入它们的方法,但这不适用于我的目的,因为我希望它们包含在战争工件中。
非常感谢!
【问题讨论】:
这里有文件吗 file:///Users/mlab/Desktop/2016/project_web/resources/edu/mlab/jar1/jar1_local/jar1_local-1.0.jar ? 不,我不知道,但是包声明不应该解决这个问题吗? 我重新编辑了路径。不,在 groupId/artifactId/artifactId-version.jar 中的 Maven 搜索 jar,其中 groupid 必须与每个点字符的目录分开。试试:) 我尝试制作这样一个文件夹,但它似乎无法解决任何问题。错误仍然在resources
中查找
【参考方案1】:
-
首先尝试使用以下命令将这两个 jar 文件安装到
Maven
的本地存储库中
mvn org.apache.maven.plugins:maven-install-plugin:2.5.2:install-file -Dfile=path-to-your-artifact-jar \
-DgroupId=your.groupId \
-DartifactId=your-artifactId \
-Dversion=version \
-Dpackaging=jar \
-DlocalRepositoryPath=path-to-specific-local-repo
参考网址:http://maven.apache.org/plugins/maven-install-plugin/examples/specific-local-repo.html
注意:您的本地 Maven
存储库在安装 $M2_HOME\conf\settings.xml 中指定,例如
<localRepository>C:\local_maven_repo</localRepository>
然后使用常规的Maven
标签
<dependency>
<groupId>your.groupId</groupId>
<artifactId>your-artifactId</artifactId>
<version>your-version</version>
</dependency>
【讨论】:
如果我想创造一个战争神器,这仍然成立吗? 这两个jar文件会被包含在war文件的WEB-INF/lib中。 好的,在这种情况下,我要设置的 groupID/artifactID 是什么? 两个 jar 文件的 groupId 都是 edu.mlab,两个 jar 文件的版本都是 1.0,jar 1 的 artifactId 是 jar1 和 jar 2 是 jar2。您可以稍后重命名。 嗨,我刚刚再次尝试做这件事,检查一切是否正确设置,但发生了一些奇怪的事情。 1) 我的 $M2_HOME/conf/settings.xml 中没有显示关于这个特定存储库的任何内容。 2)如何重命名它? 3)它似乎只是随机选择了一个文件夹,将其命名为我的 groupID 并声称它是一个 jar,而不是实际找到 Jar1。有什么我能做的吗?【参考方案2】:假设:您正在使用 Windows
并且您的 jar1 和 jar2 位于 C:\Users\yourusername
文件夹
设置您的 M2_HOME 环境变量,例如
C:\Users\yourusername>set M2_HOME=C:\apache-maven-3.3.9
C:\Users\yourusername>echo %M2_HOME%
C:\apache-maven-3.3.9
手动创建文件夹 C:\local_maven_repo 然后编辑编辑文件
C:\apache-maven-3.3.9\conf\settings.xml 如下
运行 mvn 命令将 jar1 和 jar2 安装到 C:\local_maven_repo,例如
C:\Users\yourusername>mvn org.apache.maven.plugins:maven-install-plugin:2.5.2:install-file -Dfile=jar1.jar -DgroupId=edu.mlab -DartifactId=jar1 -Dversion=1.0 -Dpackaging=jar -DlocalRepositoryPath=C:\local_maven_repo
C:\Users\yourusername>mvn org.apache.maven.plugins:maven-install-plugin:2.5.2:install-file -Dfile=jar2.jar -DgroupId=edu.mlab -DartifactId=jar2 -Dversion=1.0 -Dpackaging=jar -DlocalRepositoryPath=C:\local_maven_repo
-
验证 jar1 和 jar2 是否在 C:\local_maven_repo 中,例如
C:\Users\yourusername>dir C:\local_maven_repo\edu\mlab\jar1\1.0\
C:\Users\yourusername>dir C:\local_maven_repo\edu\mlab\jar2\1.0\
-
打开文件 C:\local_maven_repo\edu\mlab\jar1\1.0\jar1-1.0.pom 和 C:\local_maven_repo\edu\mlab\jar2\1.0\jar2-1.0.pom
文件:C:\local_maven_repo\edu\mlab\jar1\1.0\jar1-1.0.pom
<groupId>edu.mlab</groupId>
<artifactId>jar1</artifactId>
<version>1.0</version>
文件:C:\local_maven_repo\edu\mlab\jar2\1.0\jar2-1.0.pom
<groupId>edu.mlab</groupId>
<artifactId>jar2</artifactId>
<version>1.0</version>
复制以下内容并将它们包含在您的 pom.xml 中,如下所示
<dependency>
<groupId>edu.mlab</groupId>
<artifactId>jar1</artifactId>
<version>1.0</version>
<dependency>
<dependency>
<groupId>edu.mlab</groupId>
<artifactId>jar2</artifactId>
<version>1.0</version>
<dependency>
【讨论】:
以上是关于在 Maven 项目中包含本地 jar 文件 - 找不到文件的主要内容,如果未能解决你的问题,请参考以下文章
收到一个主 jar 文件,其中包含需要在类路径中的其他 jar 文件。在我的 Maven 项目中包含这个主 jar 的最佳方法是啥?