从孩子pom罐子里面有自己的依赖

时间:2017-01-05 11:21:07

标签: java maven build

有:

父母:

<parent>
    <artifactId>app</artifactId>
    <groupId>practice</groupId>
    <version>1.0</version>
</parent>

<artifactId>h2db</artifactId>
<build>
    <finalName>h2db</finalName>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>3.0.2</version>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <mainClass>h2_server.H2ConsoleServer</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </plugin>
    </plugins>
</build>

<dependencies>
    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <version>1.4.185</version>
    </dependency>
</dependencies>

Child pom:

maven-assembly-plugin

在此示例中,这些是具有2个(或更多)依赖项的父pom。 Child pom只有一个它需要的依赖。我可以从这个子pom模块构建一个jar并包含(范围:编译)它的单一依赖吗?它构建一个jar但不包含jar文件中的h2依赖。我试图在子pom中使用jar-with-dependencies <a routerLink="/Supplier" routerLinkActive="active">Supplier</a> <a routerLink="/Customer" routerLinkActive="active">Customer</a> <router-outlet></router-outlet> ,但结果它创建了一个包含来自父pom的所有依赖项的jar。

2 个答案:

答案 0 :(得分:1)

在父pom中列出依赖关系时,这是因为子项目需要它们。

您应该考虑从父pom中删除所有子项不需要的依赖项。

然而,最好的一种做法是使用dependencyManagement。您可以在父pom中指定将由子项目添加的任何log4j和h2库的版本。然后在您的子项目中,您只需导入不带版本的依赖项。

父母:

<groupId>practice</groupId>
<artifactId>app</artifactId>
<packaging>pom</packaging>
<version>1.0</version>

<modules>
    <module>h2db</module>
</modules>

<build>
    <pluginManagement>
    ...
    </pluginManagement>
</build>

<dependencyManagement>
<dependencies>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>

    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <version>1.4.185</version>
    </dependency>
</dependencies>
</dependencyManagement>

Child pom:

<parent>
    <artifactId>app</artifactId>
    <groupId>practice</groupId>
    <version>1.0</version>
</parent>

<artifactId>h2db</artifactId>
<build>
    <finalName>h2db</finalName>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>3.0.2</version>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <mainClass>h2_server.H2ConsoleServer</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </plugin>
    </plugins>
</build>

<dependencies>
    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
    </dependency>
</dependencies>

答案 1 :(得分:0)

离开我的头顶,您可以尝试maven-shade-pluginhttp://maven.apache.org/plugins/maven-shade-plugin/examples/attached-artifact.html

不确定它是否正是您所需要的,但它确实允许您指定包含/忽略的依赖项。