Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否可以重命名具有依赖项的maven jar?_Java_Maven 2_Jar_Maven Assembly Plugin - Fatal编程技术网

Java 是否可以重命名具有依赖项的maven jar?

Java 是否可以重命名具有依赖项的maven jar?,java,maven-2,jar,maven-assembly-plugin,Java,Maven 2,Jar,Maven Assembly Plugin,我目前正在使用带有依赖项的jar程序集来创建这样一个jar。然而,我的罐子的名字有点长 由于这个jar正被AS400上的RPG程序使用,我想缩短它,让开发人员的生活更轻松一些。但是,除了手工操作之外,我还没有找到一种方法来将jar从通常的项目名称版本分类器jar与dependencies.jar一起重命名。我想要类似于项目名称版本分类器full.jar的东西 在不使用依赖项程序集描述符复制jar并调用它full的情况下,是否仍可以这样做 此外,我希望继续将jar存储在存储库中,而不必组装类路径

我目前正在使用带有依赖项的jar程序集来创建这样一个jar。然而,我的罐子的名字有点长

由于这个jar正被AS400上的RPG程序使用,我想缩短它,让开发人员的生活更轻松一些。但是,除了手工操作之外,我还没有找到一种方法来将jar从通常的
项目名称版本分类器jar与dependencies.jar一起重命名。我想要类似于
项目名称版本分类器full.jar的东西

在不使用依赖项程序集描述符复制jar并调用它full的情况下,是否仍可以这样做

此外,我希望继续将jar存储在存储库中,而不必组装类路径

我需要两件文物。带有我的分类器的jar保存构建所针对的区域。jar包含所有依赖项,其中也包括区域

project name version region full.jar
project name version region.jar
应存储在存储库中。在第一个示例中,分类器是区域满的,在第二个示例中是区域满的。后者正在工作。

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

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


描述符并修改id

此示例将导致程序集id附加到finalName,因此如果需要名称region-full.jar,可以将finalName指定为region,将程序集id指定为full。这将在target中生成一个名为region-full.jar的文件,但请注意,它仍将作为附加工件安装到Maven存储库中,并使用full作为分类器。只要此id与其他程序集的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>

maven汇编插件
2.2-β-4
带有依赖项的jar
准备包装
单一的
src/main/assembly/jar-assembly.xml
区域
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>

满的
罐子
假的
真的
运行时
${project.build.outputDirectory}

我要赞扬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>

${env}-已满
罐子
假的
真的
运行时
${project.build.outputDirectory}
我没有在maven assembly插件设置中使用finalName参数,因为它使用我的project-name-version-env-full.jar名称构建了我的项目,其中env-full是分类器


想象一下,当我得知汇编xml可以由构建中的项参数化时,我会有多么惊讶。这正是我想要的。

多亏了这里的帖子和对jar程序集的深入研究,我为一个具有自定义名称的一次性重新打包的可执行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>

maven汇编插件
2.2
exe
包裹
单一的
我的名字
假的
假的
assembly.xml
karlthepagain.MyMain
在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>

exe
罐子
假的
/
真的
运行时

这将产生
MyJarName.jar
,它的所有依赖项都重新打包到同一个jar中,并指定
Main类:karlhepagain.MyMain
我想我已经找到了一种方法,可以直接在pom中配置它,而不需要单独的jar-assembly.xml

它与Rich的答案基本相同,只是finalName是用artifactId和version指定的

<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>

maven汇编插件
带有依赖项的jar
${project.artifactId}-${project.version}-完整
假的
com.mycompany.MyMainClass
让我的罐子充满依赖
包裹
单一的
这对我很有效

<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>

你喜欢什么名字
maven汇编插件
2.6
带有依赖项的jar
假的
com.mycompany.MyMainClass
组装
包裹
单一的

也可以使用
${project.build.finalName}
作为最终名称覆盖原始jar文件:

<plugin>
  <artifactId>maven-assembly-plugin</artifactId>
   <executions>
      <execution>
          <phase>package</phase>
          <goals>
             <goal>single</goal>
          </goals>
      </execution>
   </executions>
   <configuration>
     <descriptorRefs>
       <descriptorRef>jar-with-dependencies</descriptorRef>
     </descriptorRefs>
     <finalName>${project.build.finalName}</finalName>
     <appendAssemblyId>false</appendAssemblyId>
   </configuration>
 </plugin>

maven汇编插件
包裹
单一的
带有依赖项的jar
${project.build.finalName}
假的

在这方面的工作非常丰富。本质上,我需要存储两个分类器工件。当appendAssemblyId打开时,我有3个工件,一个没有分类器,一个是分类器
<plugin>
  <artifactId>maven-assembly-plugin</artifactId>
   <executions>
      <execution>
          <phase>package</phase>
          <goals>
             <goal>single</goal>
          </goals>
      </execution>
   </executions>
   <configuration>
     <descriptorRefs>
       <descriptorRef>jar-with-dependencies</descriptorRef>
     </descriptorRefs>
     <finalName>${project.build.finalName}</finalName>
     <appendAssemblyId>false</appendAssemblyId>
   </configuration>
 </plugin>