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

oym*_*oym 15 java maven-2

有了maven,有可能有一个顶级项目的包装类型是"war",它将构建自己及其所有依赖模块(打包为jar)并让build生成一个project.war文件?

我见过的大部分文档示例和其他示例经常使用包装类型为"pom"的顶级项目,该项目仅用于将模块绑定在一起.我可以避免这个吗?

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

更新:换句话说(为了简化问题):如果我有,project A并且project B在哪里project A依赖project B- 是否有一种方法可以让我执行构建project A并自动构建project B(并包含project B其依赖性 - 创建projectA.war,包含projectB.jar)?

Jig*_*shi 11

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

Consedering ProjectAproject-webapp,ProjectBproject-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>
Run Code Online (Sandbox Code Playgroud)

您的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>
Run Code Online (Sandbox Code Playgroud)

您的核心项目:

<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>
Run Code Online (Sandbox Code Playgroud)

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

-------Grand Parent.pom
  |
  |--------project-webapp
  |                     |
  |                     project-webapp.pom
  | 
  | -------project-core.pom
                        |
                       project-core.pom
Run Code Online (Sandbox Code Playgroud)

从父pom执行mvn clean install它将构建web-app和核心项目


sup*_*ark 9

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


rus*_*tyx 9

这在Maven 1,2或3中是不可能的.

我建议放弃这个想法,因为Maven的全部目的是强制执行标准化的开发过程.不要对抗结构,只需创建父POM模块并在其下创建WAR模块和其他依赖项.