【问题标题】:How to tell maven-dependency-plugin that the artifact is used in the project?如何告诉 maven-dependency-plugin 该工件已在项目中使用?
【发布时间】:2011-02-07 17:11:45
【问题描述】:

这是我的多模块项目的结构:

/root
  /api dependencies: slf4j
  /foo dependencies: slf4j-log4j12, log4j

换句话说,模块api 使用slf4j 进行日志记录。它不知道日志功能的实现是什么。模块foo 添加slf4j-log4j12log4j 以实现日志记录。很简单。

现在我正在运行maven-dependency-plugin:analyze-only,这就是模块foo 的含义:

[WARNING] Unused declared dependencies found:
[WARNING]    org.slf4j:slf4j-log4j12:jar:1.6.1:compile
[WARNING]    log4j:log4j:jar:1.2.16:compile

意思是插件不理解foo真的需要这些依赖。我该如何解决这个问题?

【问题讨论】:

  • 当依赖管理由Maven完成时,为什么要添加另一个管理依赖的模块?这是 Maven 的强项

标签: java maven-2 maven-dependency-plugin


【解决方案1】:

如果你给这些依赖项一个runtime 范围而不是compile 会发生什么?

如果您将它们定义为编译时依赖项,我认为依赖项插件会认为编译时需要它们,而实际上它们不是。但运行时只需要 slf4-log4j 和 log4j JAR 文件。

编辑:您可能需要设置ignoreNonCompile 选项:

http://maven.apache.org/plugins/maven-dependency-plugin/analyze-mojo.html

【讨论】:

  • 好主意,但结果是一样的:(
  • @yegor256 我刚刚编辑了我的答案。分析任务上有一个“ignoreNonCompile”标志,您可能需要设置它。
  • 奇怪的 'ignoreNonCompile' 不默认为真。
  • 我想知道如何对运行时范围进行分析。文档只说:“任何未进入字节码的内容都不会被检测到。例如,常量、带有源保留策略的注释或 javadoc 链接就是这种情况。”但它在运行时是如何工作的仍然很有趣。
【解决方案2】:

您是否尝试将slf4j-log4j12log4j 的范围设置为运行时?
maven dependency scope

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-24
    • 2011-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-04
    • 1970-01-01
    相关资源
    最近更新 更多