我有这个 Maven 层次结构:
sim-java
ejb
web
log4j
...
ejb、web 和 log4j 是 sim-java 的模块,每个模块都通过父标签引用 sim-java。
我想创建一个 log4j 模块并将其作为依赖项包含在 sim-java 中,因此 log4j 将作为依赖项出现在 ejb 和 web 模块中。
基本上,我在 sim-java 中的 pom.xml 包含以下内容:
<dependencies>
<dependency>
<groupId>com.sim</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
<scope>provided</scope>
</dependency>
</dependencies>
(提供范围是因为我有一个 ear 模块,它将在 ear 文件中包含 com.sim:log4j)。
现在,我的 log4j 模块中的 pom.xml 是这个:
<dependencies>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
我有这个构建错误:
30/10/12 18:56:07 CET:log4j 的构建错误;org.apache.maven.lifecycle.LifecycleExecutionException:无法在项目 log4j 上执行目标:无法解析项目 com.sim:log4j:jar:0.0.1-SNAPSHOT 的依赖项:找不到工件 com.sim:log4j:jar: 0.0.1-快照
我认为存在一些依赖问题,因为 sim-java 使用 com.sim.log4j 作为传递依赖,所以我在 log4j pom.xml 中测试了它:
<dependencies>
<dependency>
<groupId>com.sim</groupId>
<artifactId>sim-java</artifactId>
<version>0.0.1-SNAPSHOT</version>
<exclusions>
<exclusion>
<groupId>com.sim</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
30/10/12 18:59:22 CET:[警告] com.sim:log4j:jar:0.0.1-SNAPSHOT 的 POM 丢失,没有可用的依赖信息 2012 年 30 月 10 日 18:59:22 CET:缺少工件 com.sim:log4j:jar:0.0.1-SNAPSHOT:provided 30/10/12 18:59:22 CET: 缺少工件 com.sim:log4j:jar:0.0.1-SNAPSHOT:provided 30/10/ 12 18:59:22 CET:缺少工件 com.sim:log4j:jar:0.0.1-SNAPSHOT:provided
也许在模块(ejb、web 等)中包含 com.sim.log4j 会起作用,但我想通过 sim-java 项目使用传递依赖。
请问这个怎么做?
奥利维尔