3

我有 2 个项目,A 和 B。B 是 lib 项目,A 引用 B。当我向 B 添加新函数时,可以mvn install在 B 上运行,但mvn install由于无法从 new 中找到符号,它在 A 上失败B.

我确定我确实在项目B上正确安装了,但是为什么A仍然无法编译和安装?

这是A的pom.xml:

<dependency>
    <groupId>A and B's group</groupId>
    <artifactId>B</artifactId>
    <scope>provided</scope>     
</dependency>

任何线索?谢谢

4

3 回答 3

1

我建议创建一个多模块构建,如下所示:

+-- root
      +-- pom.xml
      +-- module-A
      +-- module-B

在根 pom 中,您需要像这样定义模块并将包装定义为pom

<modules>
  <module>module-A</module>
  <module>module-B</module>
</modules>

此外,您可以简单地通过以下方式定义模块-A 到模块-B 的依赖关系:

<project ..
  <parent>
     <groupId>project.parent</groupId>
     <artifactId>parent</artifactId>
     <version>1.0-SNAPSHOT</version>
  </parent>

  <artifactId>module-A</artifactId>

  <dependencies>
    <dependency>
      <groupId>${project.groupId}</groupId>
      <artifactId>module-B</artifactId>
      <version>${project.version}</version>
    </dependency>
    ..
  </dependencies>
  ..
</project>

使用此设置,您只需通过以下方式从根文件夹构建所有模块:

mvn clean package

或者您可以将该结构导入 Eclipse(安装了 m2e?)或任何其他 IDE,如 IntelliJ 或 Netbeans。

于 2012-12-31T11:04:57.747 回答
0

您可以<version>在项目和依赖项的声明中包含该元素。

  • 从 Maven 命令行传递版本变量。例如:${build.version}

模块 A pom.xml

<groupId>A & B's Group ID</groupId>
<artifactId>A</artifactId>
<version>${build.version}</version>

<dependencies>
    <dependency>
        <groupId>A & B's Group ID</groupId>
        <artifactId>B</artifactId>
        <version>${build.version}</version>
        <type>war</type>
        <scope>provided</scope>
    </dependency>   
...

因此,每当构建和安装项目 B 时,该依赖项将在该特定版本的本地 maven 存储库中可用,并将由项目 A 选择

于 2012-12-31T07:21:20.873 回答
0

尝试mvn clean install对 A 进行全新构建,或者mvn -U install强制 Maven 查找更新的快照。听起来您的环境仍在使用较旧的 JAR。很难从这个描述中看出你的设置是什么——听起来你正在正确地将 B 安装到你的本地存储库,但我不确定你的 IDE 是否也可能试图“提供帮助”。

于 2012-12-31T03:55:31.273 回答