在我们的 Maven 项目中,我们正在尝试以下目录结构(总共大约 80 个项目,只显示了几个以便您理解):
myappli (pom)
-- module1 (pom)
--|-- utils (pom)
--|-- ejb (pom)
--|--|-- myappli-module1-a-ejb (jar)
--|--|-- myappli-module1-b-ejb (jar)
--|-- war (pom)
--|-- applet (pom)
...
-- module6 (pom)
--|-- utils (pom)
--|-- ejb (pom)
--|--|-- myappli-module6-c-ejb (jar)
--|-- war (pom)
--|-- applet (pom)
注意:这是 Maven 的扁平结构,因为所有非叶子项目的
packaging
值都是“pom”。(参见 BetterBuildsWithMaven 书)。
我们在“”中定义依赖版本dependencyManagement
,在“ myappli
” pom.xml 中。这工作正常。
我们的问题是依赖本身的重用。例如,ejb 依赖项对所有 ejb 项目都是通用的(按设计)。我们不想剪切粘贴,并在每次更改时保持所有这些!
我们正在考虑为 ejb 依赖项使用一些“导入概念”,并在应用程序级别定义我们的 ejb 依赖项。我们不成功的尝试是:
- Maven "
parent pom
" 概念很好,但它已经被模块使用,所以它不能满足我们的要求。 - 在 Maven 中找不到导入工具(dependencyManagement 除外)
无法识别 XML 实体定义。我们尝试了如下的 pom,得到了错误
“Reason: Parse error reading POM. Reason: could not resolve entity named 'ejbDependencies'
”:<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE project [
<!ENTITY ejbDependencies SYSTEM "./ejbDependencies.txt">
]>
<project ...
……
&ejbDependencies;
_
已编辑:我正在尝试罗伯特建议的解决方案,但出了点问题。
当我编译我的 ejb 项目时,它本身并没有找到依赖项。编译(mvn compile)时出现错误,说 javax.ejb 包丢失。
注意:我之前确实在依赖项项目上运行了“mvn install”。
这是我的配置:
<project ...>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.company</groupId>
<artifactId>myproj-maven</artifactId>
<version>3.1-SNAPSHOT</version>
</parent>
<groupId>com.company</groupId>
<artifactId>myproj-maven-ejb</artifactId>
<version>${myproj-version}</version>
<packaging>pom</packaging>
<dependencies>
<dependency>
<groupId>javax.ejb</groupId>
<artifactId>ejb</artifactId>
</dependency>
<dependency>
<groupId>ojdbc</groupId>
<artifactId>ojdbc</artifactId>
</dependency>
</dependencies>
</project>
---------------------------------
<project ...>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.company</groupId>
<artifactId>myproj-identite-ejb</artifactId>
<version>3.1-SNAPSHOT</version>
</parent>
<groupId>com.company</groupId>
<artifactId>myproj-identite-metier</artifactId>
<name>SNR IDENTITE METIER</name>
<version>2.0.1</version>
<packaging>ejb</packaging>
<dependencies>
<dependency>
<groupId>com.company</groupId>
<artifactId>myproj-maven-ejb</artifactId>
<version>${myproj-version}</version>
<type>pom</type>
</dependency>
</dependencies>
</project>
我不知道它是否会改变某些东西,但我们有一个将两个 pom 关联起来的层次结构。
我们有一个严格的 Maven 结构,每个目录都将所有子目录声明为 maven 模块,每个子目录都将父目录声明为 maven 父目录。
而共同的父目录就是这个结构的一部分。
+---maven
| \---ejb
+---identite
| +---ejb
| | \---SNR_IDENTITE_METIER
编辑:
礁石给出的答案似乎是正确的。使用 Maven 是不可能的,因为提供了我们的依赖项,因此不具有传递性 :-(
我们在设置 Maven 时确实有很多问题。这么多的小事情就是行不通。今天我发现站点目标无法处理我们用于版本号的属性!