在特定执行阶段忽略 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>
所以,将<optional>true</optional>
添加到您的 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 依赖的主要内容,如果未能解决你的问题,请参考以下文章