我遇到了maven的情况
── bom-porject
├── pom.xml
这是bom proejct,仅用于外部maven依赖的依赖管理。
这个项目只是将一个pom文件发布到maven repo
此bom导入到通过<dependency Management>
然后我有另一个项目
── project-libs-root
├── module-lib-database
│ └── pom.xml <--- Module lib database POM
├── module-lib-conversions
│ └── pom.xml <--- Module lib conversion POM
└── pom.xml <--- project-libs-root
这是我正在开发的所有应用程序使用的一些常用库。
使用
project-libs-root pom.xml
导入bom-porject pom.xml
<dependencyManagement>
我这样做可以访问bom-project
中定义的dependecies然后我有另一个maven项目
── application-root
├── module-app-db
│ └── pom.xml <--- Module apllication database POM
├── module-app-domain
│ └── pom.xml <--- Module application domain POM
├── module-app
│ └── pom.xml <--- Module application POM (this is a deployment)
└── pom.xml <--- application-root
这是一个应用程序application-root pom.xml
导入
project-libs-root pom.xml
通过<dependencyManagement>.
通过这样做,我可以访问bom-porject pom.xml
和依赖项
在其中定义
围绕内部模块的混乱部分,并使用它来管理它在项目中的依赖性例如
假设我需要在module-lib-database
的{{1}}工件project-libs-root
中使用工件module-app-db
,
我应该在哪里提到application-root
目前我明确地在module-lib-database
<dependecies>
标记内调用它
我有什么方法可以在module-app-db pom.xml
中定义它并通过project-libs-root
标记将其下载到应用程序
答案 0 :(得分:1)
可能这就是我试图根据你的描述设置项目的方式:
parent-bom - 这将声明您的所有第三方依赖项在其他项目中维护一个版本
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>parent-bom</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>23.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>6.0.6</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
lib-parent 您所描述的公共库的另一个多模块项目。
|-lib-parent
| |
| |- lib-db
| | |
| | | - pom.xml
| | ...
| |- pom.xml
<强> LIB-父强>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>lib-parent</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<modules>
<module>lib-db</module>
<module>lib-bom</module>
</modules>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.example</groupId>
<artifactId>parent-bom</artifactId>
<version>1.0-SNAPSHOT</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
<强> LIB-分贝强>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.example</groupId>
<artifactId>lib-parent</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>lib-db</artifactId>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
</dependencies>
</project>
<强> LIB-BOM 强>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.example</groupId>
<artifactId>lib-parent</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>lib-bom</artifactId>
<packaging>pom</packaging>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>lib-db</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
最后,application-parent项目将使用来自parent-bom
的依赖项和来自lib-parent
项目的公共库。
|- application-parent
| |
| |- module-app-db
| | |
| | | - pom.xml
| | ...
| |- pom.xml
<强>应用父强>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>application-parent</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<modules>
<module>module-app-db</module>
</modules>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>parent-bom</artifactId>
<version>1.0-SNAPSHOT</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>lib-bom</artifactId>
<version>1.0-SNAPSHOT</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
<强>模块-APP-分贝强>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.example</groupId>
<artifactId>application-parent</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>module-app-db</artifactId>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>lib-db</artifactId>
</dependency>
</dependencies>
</project>
要构建上述项目,请执行以下步骤:
$cd /path/to/parent-bom-dir && mvn clean install
$cd /path/to/lib-parent-dir && mvn clean install
$cd /path/to/application-parent-dir && mvn clean install
让我知道这是否适合你。
答案 1 :(得分:0)
我没有足够的声誉来评论,所以我正在使用答案,但如果你发表评论我可以回复。
我记得,创建了一个BOM来定义一个自定义库,其中包含我的项目所需的所有依赖项,并且它用于在一个地方跟踪版本,这样当我更新一个或者更多依赖项我不必费心修改导入它们的所有项目。
现在,我在问:在项目结构中,让projects-lib-root
与所有子项目共享是否正确?在这种情况下,将它包含在bom项目中是否有意义?
您怎么看?
答案 2 :(得分:0)
如果我完全理解你的要求,我会建议你有一个父母的朋友&#34;对于内部依赖。意思是,这个pom文件将<dependenciesManagement>
包含所有内部依赖项。
这个父pom将拥有一个父节点,它是另一个父节点,具有第三方依赖关系。其他组件可以直接使用此父pom,而无需(绕过)&#34;内部&#34;父母pom。
希望这是有道理的。