在 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.jar1edu.mlab.jar2 处包含包声明,所以这就是我想要它们的地方。 jar 文件位于资源文件夹中,就在基本目录下。

这就是设置。现在,当我尝试mvn packagemvn 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 -&gt; [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&gt;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&gt;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&gt;dir C:\local_maven_repo\edu\mlab\jar1\1.0\

C:\Users\yourusername&gt;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 的最佳方法是啥?

如何在 maven jar 构建过程中包含外部 jar?

如何在 Maven 生成的 jar 中包含特定文件夹?

在打包的 JAR 中包含本地依赖项 [重复]

在gradle项目中包含jar文件[重复]

使用 Maven Surefire 运行依赖项 jar 中包含的 JUnit 测试