Maven:如何将本地 lib 目录用于依赖项而不是 Maven 存储库

Posted

技术标签:

【中文标题】Maven:如何将本地 lib 目录用于依赖项而不是 Maven 存储库【英文标题】:Maven : How to use local lib directory for dependencies instead of maven respoitories 【发布时间】:2019-06-06 08:42:38 【问题描述】:

集成测试时我的项目结构如下。

 Project-A
    |_conf (contains the configuration files)
    |_lib  (Contains the all dependencies)
    |_pom.xml
    |_target
        |_test (Contains the integration tests)

当我运行以下 maven 命令时,它会从 nexus 下载依赖项并指向本地存储库而不是 lib 目录。

我如何告诉 maven 检查 lib 文件夹中的依赖项而不是本地 maven 存储库?

注意:lib 包含测试项目所需的所有依赖项。

    mvn surefire:test

【问题讨论】:

你可以通过 ~/.m2/settings.xml 中的 settings.xml 文件来定义这些东西 lib 包含唯一的罐子。它不是 Maven 存储库。不包含 groupid 文件夹结构。 开始使用存储库管理器并将 lib jar 部署到存储库管理器或使用默认依赖项...这让生活更轻松、更方便...使用 lib 目录真的是一件坏事这意味着将 jar 文件提交到不属于它们的版本控制中...... 你的设置是个坏主意。首先是 conf 目录?如果将配置文件(通常称为资源)打包到生成的 jar 文件中,则应将其放入 src/main/resources 中。如果仅需要测试,则应将其放入 /src/test/resources 中。 @khmarbaise,我知道这是个坏主意,但它是遗留应用程序。我们无法更改项目结构 【参考方案1】:

如果您想使用不在 maven repo 中的依赖项,那么您可以将这些 jar 放在项目中(在您的情况下为 lib 目录)。并指定要使用的 jar 的路径,如下所示。

<dependency>
    <groupId>anything</groupId>
    <artifactId>anything</artifactId>
    <version>anything</version>
    <scope>system</scope>
    <systemPath>$basedir/lib/jar-name.jar</systemPath>
</dependency>

您可以在此处提及groupIdartifactIdversion 的任何内容。在这种情况下,这些字段将被忽略。

【讨论】:

我只想在集成测试期间引用 lib 目录。我正在通过配置文件运行它。 您可以尝试将&lt;scope&gt; 设为test 如果您想在测试期间引用 lib 目录,而在运行时 maven repo,则可能需要通过将 &lt;scope&gt; 一次指定为 test&lt;systemPath&gt; 并再次使用 @987654330 来添加依赖项两次@ as runtime. 有100多个罐子。我们需要为所有人做这件事吗?有没有提供路径的选项? 那种jar文件就是那些jar文件?它们是由其他构建生成的吗?您应该使用通常的依赖项,并且如前所述使用适当的范围。此外,示波器系统已被弃用很长时间,并且会产生警告......

以上是关于Maven:如何将本地 lib 目录用于依赖项而不是 Maven 存储库的主要内容,如果未能解决你的问题,请参考以下文章

未找到锁定文件。更新依赖项而不是从锁定文件安装。奥罗商业

eclipse maven项目如何将所有的jar包复制到lib目录下?

指定 `bin_PROGRAMS` 的依赖项而不告诉 Automake 如何构建 `bin_PROGRAMS`

列出 R 包依赖项而不安装包

列出python包依赖项而不加载它们?

maven打包将依赖和配置外置的配置方式