首页 文章

是否可以重命名maven jar-with-dependencies?

提问于
浏览
109

我目前正在使用jar-with-dependencies程序集来创建这样一个jar . 但是,我的 jar 的名字有点长 .

由于这个jar正被AS400上的RPG程序使用,我没有找到一种方法来重命名jar通常的 project-name-version-classifier-jar-with-dependencies.jar . 我喜欢像 project-name-version-classifier-full.jar 这样的东西

反正有没有基本上复制jar-with-dependencies程序集描述符并将其调用为满?

另外,我想继续让jar没有存储在存储库中的类路径组装 .

我需要两个文物 . 我的分类器的jar包含构建所在的区域 . 包含所有依赖关系的jar,也包括该区域 .

project-name-version-region-full.jarproject-name-version-region.jar 应存储在存储库中 . 在第一个例子中,分类器是区域满的,在第二个区域 . 后者正在发挥作用 .

5 回答

  • 8

    您可以指定finalName属性以为jar提供所需的名称,并指定appendAssemblyId应为false以避免"jar-with-dependencies"后缀 .

    下面的配置将输出一个名为“test.jar”的jar

    <plugin>
      <artifactId>maven-assembly-plugin</artifactId>
      <version>2.2-beta-4</version>
      <executions>
        <execution>
          <id>jar-with-dependencies</id>
          <phase>package</phase>
          <goals>
            <goal>single</goal>
          </goals>
          <configuration>
            <descriptorRefs>
              <descriptorRef>jar-with-dependencies</descriptorRef>
            </descriptorRefs>
            <finalName>test</finalName>
            <appendAssemblyId>false</appendAssemblyId>
          </configuration>
        </execution>
      </executions>
    </plugin>
    

    更新:根据您的评论,使用内置描述符将无法正常工作 . 我相信这是最近版本的程序集插件中的一个错误 - 他们已经删除了对分类器的支持,但是如果你使用内置的描述符,id就会被修复,所以你最终会得到一个很大的愚蠢名称 .

    作为解决方法,您可以复制jar-with-dependencies描述符使用的程序集描述符并修改id .

    此示例将导致程序集ID附加到finalName,因此如果您需要名称为region-full.jar,则可以将finalName指定为region,将程序集ID指定为full . 这将导致目标中的文件名为region-full.jar,但请注意,它仍将作为附加工件安装到Maven存储库,并完全用作分类器 . 只要这个id与你的其他程序集不同,就应该没有碰撞 .

    pom配置看起来像这样 .

    <plugin>
      <artifactId>maven-assembly-plugin</artifactId>
      <version>2.2-beta-4</version>
      <executions>
        <execution>
          <id>jar-with-dependencies</id>
          <phase>prepare-package</phase>
          <goals>
            <goal>single</goal>
          </goals>
          <configuration>
            <descriptors>
              <descriptor>src/main/assembly/jar-assembly.xml</descriptor>
            </descriptors>
            <finalName>region</finalName>
          </configuration>
        </execution>
      </executions>
    </plugin>
    

    和src / main / assembly中的jar-assembly.xml如下:

    <assembly>
      <id>full</id>
      <formats>
        <format>jar</format>
      </formats>
      <includeBaseDirectory>false</includeBaseDirectory>
      <dependencySets>
        <dependencySet>
          <unpack>true</unpack>
          <scope>runtime</scope>
        </dependencySet>
      </dependencySets>
      <fileSets>
        <fileSet>
          <directory>${project.build.outputDirectory}</directory>
        </fileSet>
      </fileSets>
    </assembly>
    
  • 188

    我想我已经找到了一种直接在pom中配置它的方法,而不需要单独的jar-assembly.xml .

    它与Rich的答案基本相同,除了使用artifactId和version指定finalName .

    <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <configuration>
            <descriptorRefs>
                <descriptorRef>jar-with-dependencies</descriptorRef>
            </descriptorRefs>
            <finalName>${project.artifactId}-${project.version}-full</finalName>
            <appendAssemblyId>false</appendAssemblyId>
            <archive>
                <manifest>
                    <mainClass>com.mycompany.MyMainClass</mainClass>
                </manifest>
            </archive>
        </configuration>
        <executions>
            <execution>
                <id>make-my-jar-with-dependenciess</id>
                <phase>package</phase>
                <goals>
                    <goal>single</goal>
                </goals>
            </execution>
        </executions>
    </plugin>
    
  • 22

    感谢这里的帖子以及maven docs中的一些挖掘,我已经为具有自定义名称的一般一次性重新包装的可执行jar程序集提出了以下配置 .

    在pom.xml中:

    <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>2.2</version>
        <executions>
            <execution>
                <id>exe</id>
                <phase>package</phase>
                <goals><goal>single</goal></goals>
                <configuration>
                    <finalName>MyJarName</finalName>
                    <attach>false</attach>
                    <appendAssemblyId>false</appendAssemblyId>
                    <descriptors>
                        <descriptor>assembly.xml</descriptor>
                    </descriptors>
                    <archive>
                        <manifest>
                            <mainClass>karlthepagain.MyMain</mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </execution>
        </executions>
    </plugin>
    

    在assembly.xml中:

    <assembly>
        <id>exe</id>
        <formats>
            <format>jar</format>
        </formats>
        <includeBaseDirectory>false</includeBaseDirectory>
        <dependencySets>
            <dependencySet>
                <outputDirectory>/</outputDirectory>
                <unpack>true</unpack>
                <scope>runtime</scope>
            </dependencySet>
        </dependencySets>
    </assembly>
    

    这将生成 MyJarName.jar ,其所有依赖项重新打包到同一个jar和指定的 Main-Class: karlthepagain.MyMain 中 .

  • 2

    我要给予Rich以使我指向正确方向的信誉,但是想要发布对我有用的解决方案,因为Rich稍微偏离了:

    我的jar-assembly.xml看起来像这样,允许在我的配置文件中存储为属性的区域更改程序集ID:

    <assembly>
      <id>${env}-full</id>
        <formats>
          <format>jar</format>
        </formats>
        <includeBaseDirectory>false</includeBaseDirectory>
        <dependencySets>
          <dependencySet>
            <unpack>true</unpack>
            <scope>runtime</scope>
          </dependencySet>
        </dependencySets>
        <fileSets>
          <fileSet>
            <directory>${project.build.outputDirectory}</directory>
          </fileSet>
        </fileSets>
    </assembly>
    

    我没有在maven-assembly-plugin设置中使用finalName参数,因为这使用我的project-name-version-env-full.jar名称构建了我的项目,其中env-full是分类器 .

    想象一下,当我了解到程序集xml可以通过构建中的项进行参数化时,我会感到惊讶 . 这正是我想要的 .

  • 2

    这对我有用

    <build>
        <finalName>anynameyoulike</finalName>
        <plugins>           
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>2.6</version>
                <configuration>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>                   
                    <appendAssemblyId>false</appendAssemblyId>
                    <archive>
                        <manifest>
                            <mainClass>com.mycompany.MyMainClass</mainClass>
                        </manifest>
                    </archive>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id> <!-- this is used for inheritance merges -->
                        <phase>package</phase> <!-- bind to the packaging phase -->
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
    

相关问题