让一个 maven 项目构建自己的依赖项?

2022-09-03 10:09:42

使用maven,是否可以有一个顶级项目,其打包类型是“war”,它将构建自身及其所有依赖模块(打包为jar),并让构建生成一个project.war文件?

我见过的许多文档示例和其他示例通常使用打包类型为“pom”的顶级项目,并且该项目仅用于将模块绑定在一起的目的。我可以避免这种情况吗?

所以基本上我需要一些东西,这实际上就像声明一个供maven构建,并在同一个POM中,在同一个模块上声明一个需要构建的模块。也许是有人已经建议的插件?<module>my-module</module><dependency>...my-module's artifact...</dependency>

更新:换句话说(为了简化问题):如果我有和,哪里依赖 - 有没有办法让我执行构建并自动构建(并包括作为其依赖项 - 创建包含projectB.jar的projectA.war)?project Aproject Bproject Aproject Bproject Aproject Bproject B


答案 1

super_aardvark建议正确的方式,但是,对于要求,
我会建议以下结构 它是合适和良好的结构:

Consedering as ,ProjectAproject-webappProjectBproject-core

您可以具有以下结构:

您的宏伟项目 :

<?xml version="1.0" encoding="UTF-8"?>
<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.mycompany.project</groupId>
    <artifactId>project</artifactId>
    <version>2.0-SNAPSHOT</version>
    <packaging>pom</packaging>

    <name>Project Repository System</name>
    <description>Project Repository System R2</description>

    <modules>
        <module>project-core</module>
        <module>project-webapp</module>
    </modules>
 </project>

您的 WebApp 项目:

<?xml version="1.0" encoding="UTF-8"?>
<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">
    <parent>
        <groupId>com.mycompany.project</groupId>
        <artifactId>project</artifactId>
        <version>2.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>project-webapp</artifactId>
    <version>2.0-SNAPSHOT</version>
    <packaging>war</packaging>
    <name>Project Web Application</name>
    <description>Project Repository</description>
    <dependency>
            <groupId>com.mycompany.project</groupId>
            <artifactId>project-core</artifactId>
            <version>2.0-SNAPSHOT</version>
     </dependency>

 </project>

您的核心项目:

<project>
    <parent>
        <groupId>com.mycompany.project</groupId>
        <artifactId>project</artifactId>
        <version>2.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>project-core</artifactId>
    <version>2.0-SNAPSHOT</version>
    <packaging>jar</packaging>
    <name>Project Core</name>
    <description>ProjectCore</description>

 </project>

您的目录结构应如下所示:

-------Grand Parent.pom
  |
  |--------project-webapp
  |                     |
  |                     project-webapp.pom
  | 
  | -------project-core.pom
                        |
                       project-core.pom

从父 pom 执行 mvn 干净安装 它将构建 Web 应用程序和核心项目


答案 2

这并不是顶级项目的真正用途。你的 WAR 项目有依赖项,这些依赖项是运行 'mvn package' 时将包含在 WAR(WEB-INF/lib 中)中的工件(例如 jar)。WAR 项目 pom 可以将顶级项目作为其父级,但它不应是其依赖项的父级。您可能希望该顶级项目既是 WAR 项目又是 WAR 中依赖项的 JAR 项目的父级。


推荐