Maven程序集插件目标“ jar-with-dependencies”不包括子pom的jar文件

时间:2018-07-01 11:06:11

标签: java maven

我试图为我的问题找到合适的解决方案,但看起来与以下maven assembly include the current project jar in the final zip/tar类似。

一个项目的想法是有一个父pom和几个孩子pom。 当我将从根级别执行“ mvn assembly:single”命令时,我希望每个孩子都拥有“ jar-with-dependencies”。

所以,到目前为止我得到的是:

  1. 如果我一个接一个地执行0xmvn package,那么第一个将成功完成,第二个将警告未包含子项目。由于未包含我的模块,因此无法启动目标。
  2. 如果我执行mvn assembly:single,则将创建具有所有依赖项的必需jar,并且能够启动目标。

我担心我错过了mvn package assembly:single之一的配置。如果有人可以帮助我,我将不胜感激。我通过此示例在GitHub存储库上添加了link

顺便说一句,我正在使用pom.xmlmaven-assembly-plugin

预先感谢您,我想,我需要购买一本关于Maven的非常好的书。

2 个答案:

答案 0 :(得分:0)

关键是禁用父项目的程序集执行:可以结合使用<skipAssembly>选项,profiles部分和properties部分来实现。

使用以下pom文件,它可以正常工作。

父母pom.xml

<?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/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
     <groupId>com.slemarchand.samples.jarwithdependencies</groupId>
     <artifactId>parent</artifactId>
     <version>1.0-SNAPSHOT</version>
     <packaging>pom</packaging>
     <name>parent</name>
     <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.7</maven.compiler.source>
        <maven.compiler.target>1.7</maven.compiler.target>
        <skip.assembly>true</skip.assembly>
     </properties>
     <modules>
        <module>child1</module>
        <module>child2</module>
     </modules>
     <dependencyManagement>
        <dependencies>
           <dependency>
              <groupId>junit</groupId>
              <artifactId>junit</artifactId>
              <version>4.11</version>
              <scope>test</scope>
           </dependency>
        </dependencies>
     </dependencyManagement>
     <build>
        <pluginManagement>
           <plugins>
              <plugin>
                 <artifactId>maven-assembly-plugin</artifactId>
                 <configuration>
                    <skipAssembly>${skip.assembly}</skipAssembly>
                    <descriptorRefs>
                       <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                 </configuration>
              </plugin>
           </plugins>
        </pluginManagement>
     </build>
     <profiles>
        <profile>
           <id>jar</id>
           <activation>
              <file>
                 <exists>${basedir}/src/main/java</exists>
              </file>
           </activation>
           <properties>
              <skip.assembly>false</skip.assembly>
           </properties>
        </profile>
     </profiles>
</project>

孩子1 pom.xml

<?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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <parent>
    <groupId>com.slemarchand.samples.jarwithdependencies</groupId>
    <artifactId>parent</artifactId>
    <version>1.0-SNAPSHOT</version>
  </parent>

  <artifactId>child1</artifactId>
  <version>1.0-SNAPSHOT</version>

  <name>child1</name>

  <dependencies>

    <dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
        <version>25.1-jre</version>
    </dependency>

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
    </dependency>

  </dependencies>
</project>

孩子2 pom.xml

<?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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <parent>
    <groupId>com.slemarchand.samples.jarwithdependencies</groupId>
    <artifactId>parent</artifactId>
    <version>1.0-SNAPSHOT</version>
  </parent>

  <artifactId>child2</artifactId>
  <version>1.0-SNAPSHOT</version>

  <name>child2</name>

  <dependencies>

    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
        <version>3.0</version>
    </dependency>

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
    </dependency>
  </dependencies>

  <build>
  </build>
</project>

您可以在此处找到示例项目:https://gitlab.com/slemarchand/jar-with-dependencies-multi-module-sample

答案 1 :(得分:0)

感谢您的回答。 事实证明,子pom.xml中的if配置错误。 我没有在“插件”部分下添加插件的定义: <build> <plugins> HERE <plugins> </build> 因此,它在<pluginManagement>下有适当的描述,这使我蒙蔽了目光...