【问题标题】:maven not packaging dependencies in jar [closed]maven没有在jar中打包依赖项[关闭]
【发布时间】:2013-05-22 23:18:18
【问题描述】:

问题

我有一个嵌套的多个模块(正确的术语?)Maven 项目,当我 mvn clean package 时,其中一个模块的依赖项没有与 jar 一起打包

该项目实际上是我没有编写的其他东西的一个分支,并且在某个地方我破坏了构建过程,但我似乎无法找出我做了什么。

项目结构如下:

  • 根
    • 分布(父级=根)
    • child1 (parent = root)
    • child2(父 = 根)

pom 如下(很抱歉把它们都贴在这里,但我真的不知道在哪里看):

根

<groupId>com.something</groupId>
<artifactId>root</artifactId>
<packaging>pom</packaging>

<modules>
    <module>child1</module>
    <module>child2</module>
    <module>distribution</module>
</modules>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
        </plugin>
    </plugins>
</build>

分布

<parent>
    <groupId>com.something</groupId>
    <artifactId>root</artifactId>
</parent>

<artifactId>distribution</artifactId>
<packaging>pom</packaging>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <configuration>
                <descriptors
                    <descriptor>src/main/assembly/distribution.xml</descriptor>
                </descriptors>
                <appendAssemblyId>false</appendAssemblyId>
            </configuration>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

child1

<parent>
    <groupId>com.something</groupId>
    <artifactId>root</artifactId>
</parent>

<artifactId>child1</artifactId>
<packaging>jar</packaging>

<dependencies>
    many dependencies here...
</dependencies>

child2

<parent>
    <groupId>com.something</groupId>
    <artifactId>root</artifactId>
</parent>

<artifactId>child2</artifactId>
<packaging>jar</packaging>

<dependencies>
    many dependencies here...
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <configuration>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
                <appendAssemblyId>false</appendAssemblyId>
            </configuration>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

distribution.xml

<id>package</id>
<formats>
    <format>tar.gz</format>
</formats>
<includeBaseDirectory>true</includeBaseDirectory>
<fileSets>
    <fileSet>
        <directory>..</directory>
        <outputDirectory>.</outputDirectory>
        <fileMode>0644</fileMode>
        <includes>
            <include>README</include>
            <include>CHANGELOG</include>
            <include>LICENSE.txt</include>
            <include>NOTICE.txt</include>
        </includes>
    </fileSet>
    <fileSet>
        <directory>../bin</directory>
        <outputDirectory>bin</outputDirectory>
        <fileMode>0755</fileMode>
    </fileSet>
    <fileSet>
        <directory>../workloads</directory>
        <outputDirectory>workloads</outputDirectory>
        <fileMode>0644</fileMode>
    </fileSet>
</fileSets>
<moduleSets>
    <moduleSet>
        <useAllReactorProjects>true</useAllReactorProjects>
        <includeSubModules>true</includeSubModules>
        <sources>
            <includeModuleDirectory>true</includeModuleDirectory>

            <fileSets>
                <fileSet>
                    <directory>.</directory>
                    <fileMode>0644</fileMode>
                    <includes>
                        <include>README</include>
                    </includes>
                </fileSet>
                <fileSet>
                    <directory>src/main/conf</directory>
                    <outputDirectory>conf</outputDirectory>
                    <fileMode>0644</fileMode>
                </fileSet>
                <fileSet>
                    <outputDirectory>lib</outputDirectory>
                    <directory>target</directory>
                    <includes>
                        <include>*.jar</include>
                    </includes>
                    <fileMode>0644</fileMode>
                </fileSet>
            </fileSets>
        </sources>
    </moduleSet>
</moduleSets>

注意:代码在 github 上,如果有人有时间和渴望查看真实项目,我很乐意提供一个到存储库的链接!

【问题讨论】:

    标签: java maven-2 dependencies


    【解决方案1】:

    我相信这是设计使然。这只是罐子的工作方式。如果您要将依赖项打包到 jar 中,它们无论如何都不会工作。解决方法是使用shade插件制作一个uberjar。 Here's a tutorial on how.

    那个maven-assembly-plugin 插件也可以做到,但是没有那么多功能。无论哪种方式,如果你将它添加到你的 child1 pom,它也会打包依赖项。

    【讨论】:

    • 谢谢,但原始项目没有使用该插件,这让我想知道它实际上是如何工作的......? (它确实/确实有效)
    • 这就是 child1 在原始项目中的样子 github.com/brianfrankcooper/YCSB/blob/master/core/pom.xml 注意,maven-assembly-plugin 没有被使用...知道如何/为什么?
    • child1 pom 是否独立构建并在其 jar 中包含 jars?
    • 在原始项目中在根 (github.com/brianfrankcooper/YCSB/blob/master/pom.xml) 处调用 mvn clean package 会导致创建 YCSB/core/target/core.jar
    • 里面有依赖吗?
    猜你喜欢
    • 2020-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-03
    • 1970-01-01
    • 2023-03-30
    相关资源
    最近更新 更多