【问题标题】:Eclipse Maven runtime dependencies and profilesEclipse Maven 运行时依赖项和配置文件
【发布时间】:2011-10-06 10:17:05
【问题描述】:

我试图了解 maven 配置文件并遇到了以下问题。

这是我的简化示例,我有两个 maven 项目,项目 A 和项目 B。

项目 A 对项目 B 具有编译时 maven 依赖项。

当 maven 配置文件“TEST”处于活动状态时,项目 B 包含运行时依赖项(可以说是项目 C)。

所以问题是我运行项目 A 时生成的类路径。它没有项目 C,即使项目 A 的 TEST 配置文件处于活动状态。

这是使用 eclipse Helios 服务版本 1,Maven Integration for Eclipse 插件 vrs 0.10.2.20100623-1649

有什么想法吗?

【问题讨论】:

  • 这和eclipse有什么关系?你是否运行过 mvn help:effective-pom 或 dependency:tree 或仅使用 -X?
  • eclipse 标签的原因是我不确定它是 eclipse 插件问题还是 maven 问题。感谢您让我了解 Effective-pom 命令,它的 maven 似乎不会将运行时依赖项从项目 B 转移到项目 As Effective pom

标签: eclipse maven-2 maven-3


【解决方案1】:

我不确定配置文件是处理 TEST 的最佳方式。

使用profile改变依赖会改变生成项目的POM。 如果您在激活 TEST 的情况下安装项目 B,将添加运行时依赖项。 (无论项目 A 配置文件)。

传递性不会添加可选依赖项。需要在项目A中添加依赖。

【讨论】:

    【解决方案2】:

    我刚刚在 Eclipse 中使用 m2eclipse 0.12.x 对此进行了测试。第二个项目 pom.xml 如下所示:

    <project>
      <modelVersion>4.0.0</modelVersion>
      <groupId>org.test</groupId>
      <artifactId>test2</artifactId>
      <version>0.0.1-SNAPSHOT</version>
    
      <profiles>
        <profile>
          <id>TEST</id>
          <dependencies>
            <dependency>
              <groupId>org.test</groupId>
              <artifactId>test1</artifactId>
              <version>0.0.1-SNAPSHOT</version>
              <scope>runtime</scope>
            </dependency>
          </dependencies>
        </profile>
      </profiles>
    </project>
    

    然后我在项目属性对话框中的 Maven 面板上将配置文件 TEST 设置为活动状态,并确保在那里启用了来自 Workspace 的依赖项解析。

    之后,您可以从 test2 项目的 src/main/java 运行任何类,生成的类路径如下所示:

    C:\Dev\Java1.6\bin\javaw.exe -Dfile.encoding=Cp1252 
       -classpath C:\Dev\Workspace\test2\target\classes;C:\Dev\Workspace\test1\target\classes org.test2.Test2
    

    请注意,具有运行时范围的依赖项仅适用于 Eclipse 中的“Java Application”启动配置类型,但不适用于“JUnit”启动配置,后者使用 m2eclipse 的 JDT 集成提供的不同类路径解析器。

    【讨论】:

    • 查看您的课程路径,您似乎已经证明配置文件在两个项目之间有效。即您正在运行 Test2 并证明当配置文件处于活动状态时它依赖于 test1,是的,这不是问题。我遇到的问题是 test2 对 test1 有正常的依赖关系,而 test1 对其他东西有一个概要的依赖关系。然后重新运行测试 2 中的代码。
    【解决方案3】:

    似乎依赖项目(传递)的配置文件中的依赖项不会给依赖它们的人提供运行时依赖项,这似乎很奇怪。

    一种解决方法是将配置文件(包含依赖项)添加到父项,然后子项继承依赖项。

    即将父母介绍给 A,我本可以按照 YMomb 的建议将它们直接放在 A 中。但这是我需要解决的这个问题的继承方面,因为我有很多项目。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-23
      • 2011-05-05
      • 1970-01-01
      • 2011-04-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多