在特定执行阶段忽略 Maven 依赖

Posted

技术标签:

【中文标题】在特定执行阶段忽略 Maven 依赖【英文标题】:ignore maven dependency during specific execution phase 【发布时间】:2011-04-12 20:32:05 【问题描述】:

我有一个(自定义)嵌入式码头启动器,我一直用它来开发/测试我的 Web 应用程序(在迁移到 maven 之前)。

我能够欺骗 m2eclipse 将 maven 托管依赖项放入库中,以便将 war 文件放到启动器类路径中(从 eclipse 运行时)。我通过为同一个工件创建两个依赖项来做到这一点:一个是“war”类型,一个是“jar”类型(“jar”依赖会欺骗 m2eclipse 做我想做的事)。

但是,当启动器找不到战争项目的 jar 时,启动器的 maven-assembly-plugin 会失败。

问:我可以告诉maven在运行包目标时忽略jar依赖吗?

更详细的背景: 在迁移到 maven 之前,我有一个 webapp.war 项目和一个 jetty-launcher 项目;我有一个 Eclipse 项目依赖项,因此启动器在运行时具有所有战争依赖​​项。一切都跑出了测试更改所需的 ide(无需重新构建 warfile)。

在迁移到 maven 之后,这种方法被淘汰了,因为 m2eclipse 知道不包含 jar 所依赖的库(因为它们是战争范围的)。

【问题讨论】:

【参考方案1】:

可能为时已晚,但这可能对某人有所帮助:

<optional>true</optional>
</dependency>

所以,将&lt;optional&gt;true&lt;/optional&gt; 添加到您的 pom.xml 中

【讨论】:

【参考方案2】:

我通过使用单独的 .m2/settings-eclipse.xml(用于 eclipse)解决了这个问题,我在其中覆盖了默认类型的依赖项。所以在我的启动器 POM 中,我有:

<dependency>
  <groupId>com.myco</groupId>
  <artifactId>my-server</artifactId>
  <version>$project.version</version>

  <!-- here we want eclipse to see "jar" but command line to see "war" -->
  <type>$jetty.launcher.workaround</type>
</dependency>

我仍然想知道是否有直接的方法来解决原始问题。

【讨论】:

以上是关于在特定执行阶段忽略 Maven 依赖的主要内容,如果未能解决你的问题,请参考以下文章

Maven 依赖管理版本在传递依赖中被忽略

Maven 依赖管理版本在传递依赖中被忽略

Maven的scope

执行 maven-assembly-plugin 后输出中缺少依赖项

Nexus Ivy Maven:二级依赖忽略传递

如何从 Gradle 中的所有依赖项中忽略特定的传递依赖项