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>
您可以在此处提及groupId
、artifactId
和version
的任何内容。在这种情况下,这些字段将被忽略。
【讨论】:
我只想在集成测试期间引用 lib 目录。我正在通过配置文件运行它。 您可以尝试将<scope>
设为test
。
如果您想在测试期间引用 lib 目录,而在运行时 maven repo,则可能需要通过将 <scope>
一次指定为 test
和 <systemPath>
并再次使用 @987654330 来添加依赖项两次@ as runtime
.
有100多个罐子。我们需要为所有人做这件事吗?有没有提供路径的选项?
那种jar文件就是那些jar文件?它们是由其他构建生成的吗?您应该使用通常的依赖项,并且如前所述使用适当的范围。此外,示波器系统已被弃用很长时间,并且会产生警告......以上是关于Maven:如何将本地 lib 目录用于依赖项而不是 Maven 存储库的主要内容,如果未能解决你的问题,请参考以下文章
eclipse maven项目如何将所有的jar包复制到lib目录下?