标签: maven-shade-plugin

maven-shade-plugin:如何关闭压缩?

我刚刚尝试了Shade插件,但生成的jar总是被压缩.

如何关闭jar压缩?

这是pom:

<build>
<plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <version>2.4</version>
        <configuration>
            <archive>
                <compress>false</compress>
            </archive>
        </configuration>
    </plugin>

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version>1.7</version>
        <executions>
            <execution>
                <phase>package</phase>
                <goals>
                    <goal>shade</goal>
                </goals>
            </execution>
        </executions>
    </plugin>
</plugins>
</build>
Run Code Online (Sandbox Code Playgroud)

谢谢

法布里斯

compression maven maven-shade-plugin

5
推荐指数
1
解决办法
1408
查看次数

Maven修改依赖jar清单文件

我很抱歉提前我无法提供确切的代码,因为我现在还没有它.但是,在尝试将项目打包到jar中时遇到了问题.我在我的pom.xml中使用maven assembly插件将所有依赖项和项目jar组装到一个地方.但是现在我需要所有这些依赖jar都有一个自定义清单文件.有可能以某种方式向Maven本身注入一些属性吗?现在我提出的唯一解决方案是使用Maven的shade插件并创建一个超级jar,但问题是一些依赖项具有自定义清单(如Spring框架),它们会丢失并且只为uber生成一个清单-罐.有可能以某种方式告诉maven解包依赖关系,编辑manifestEntries并再次打包它们并与zip中的项目jar一起组装吗?

长话短说:基本上我想知道的是,是否可能以某种方式修改其中一个依赖jar或所有依赖jar中的文件?假设我的项目依赖于spring-beans.现在我想在spring-beans.jar中修改一个特定的文件,特别是manifest.md,然后我将它们组装在一个zip中,该zip应包含project.jar和spring-beans.jar(带有修改后的manifest.md).我认为使用maven antrunner插件可以实现类似的功能吗?

例:

<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.mycompany.app</groupId>
  <artifactId>project</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>
  <name>Project</name>

  <dependencies>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-beans</artifactId>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
    </dependency>
  </dependencies>

  <build>
        <plugins>
              <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>2.4</version>
                <configuration>
                  <descriptors>
                    <descriptor>src/main/assembly/src.xml</descriptor>
                  </descriptors>
                </configuration>
              </plugin>
        </plugins>
  </build>
</project>
Run Code Online (Sandbox Code Playgroud)

我想在spring-core.jar,spring-context.jar和spring-beans.jar中修改manifest.md.我知道我可以使用shade插件制作一个超级jar,它有一个manifest.md,我可以在shade的配置中编辑,但是如果有可能以某种方式修改特定的依赖jar,我认为它会更加简单,我可以在几个小程序中使用这些库.

dependencies jar manifest maven maven-shade-plugin

5
推荐指数
0
解决办法
1259
查看次数

在阴影jar中使用log4j的问题

我的项目中有以下情况:

  1. 一个具有自己的依赖关系的大模块(称为转换器)正被集成到主应用程序中(由不同的人分别开发并具有自己的,部分重叠的依赖关系);

  2. 最初这个转换器模块可以从命令行调用为可执行jar,因此它有自己的入口点(定义了main()方法的runnable类); 这个可执行的jar总是通过maven shade插件创建为超级jar;

  3. 现在这个转换器模块必须可以从主应用程序中另外调用(为此,我现在在形成命令行参数后直接调用入口点类的main()).主应用程序也被创建为超级jar,并计划继续以这种方式创建.

在这种情况下,我将使用shade插件实现依赖关系的正确分离,为此,我已将以下重定位规范添加到转换器模块的pom.xml中:

<relocations>
<relocation>
<pattern>com</pattern>
  <shadedPattern>quase.com</shadedPattern>
</relocation>
<!-- ... other top-level patterns for converter dependencies -->
<relocation>
  <pattern>org</pattern>
  <shadedPattern>quase.org</shadedPattern>
  <excludes>
    <exclude>org.aau.**</exclude> <!-- my own code for converter is not shaded -->
  </excludes>
</relocation>
</relocations>
Run Code Online (Sandbox Code Playgroud)

因此,转换器模块的所有依赖关系都被加上阴影(对它们进行预先设定),同时组合到主应用程序的超级jar中.

此配置的问题是应用程序和转换器都使用日志记录(slf4j和log4j),并且从应用程序代码调用转换器方法并开始使用日志记录后,会发生以下错误:

log4j:ERROR A "org.apache.log4j.FileAppender" object is not assignable to a "quase.org.apache.log4j.Appender" variable.
log4j:ERROR The class "quase.org.apache.log4j.Appender" was loaded by
log4j:ERROR [sun.misc.Launcher$AppClassLoader@55f96302] whereas object of type
log4j:ERROR "org.apache.log4j.FileAppender" was loaded by [sun.misc.Launcher$AppClassLoader@55f96302].
log4j:ERROR Could not instantiate appender named "file1".
log4j:ERROR A …
Run Code Online (Sandbox Code Playgroud)

log4j jar relocation maven maven-shade-plugin

5
推荐指数
1
解决办法
1148
查看次数

JAR HELL在IDE(intelliJ),mvn-test和mvn-package中:如何在所有设置中统一依赖重定位?

对我来说很简单:我正在使用2个非常流行但有冲突的scala库:Spark SQL和JSON4s.每个都取决于Jackson XML解析器的不同版本.

因为除了我自己的程序没有人使用JSON4s,一个简单的解决方案是迁移软件包org.json4s.jackson,并com.fasterxml.jackson到新的位置.

但是,maven-shade插件只能在打包过程中执行此操作,因为所有测试和IDE运行都在此之前发生.无论是在IDE中的mvn-test还是scala测试中运行,这仍然会导致所有测试失败.

是否有一个插件可以集中管理所有三种情况的包重定位策略:JAR-packaging/mvn-test/IDE-run?我整天都在网上搜索,找不到答案.

java jar dependency-management maven maven-shade-plugin

5
推荐指数
1
解决办法
297
查看次数

如何使用maven阴影来制造罐子和战争

我正在使用openrdf的项目,我需要使用shade插件来转换我的服务条目.我想同时建立一个战争和一个罐子,因为两种用法都是可能的.但是,我无法获得阴影插件同时生成阴影jar和阴影战争 - 阴影仅调用属性中定义的包类型,并绑定例如jar插件到包阶段以创建jar在战争旁边导致一个没有阴影的罐子.如何同时创建阴影罐和阴影战争?

maven maven-shade-plugin

5
推荐指数
1
解决办法
3957
查看次数

Maven shade插件找不到'mainClass'异常?

maven-shade-plugin:2.4.3在标准的maven项目中有一个非常奇怪的构建.mainClass执行maven package命令时总是抛出找不到异常.我只是模拟一个maven-shade-plugin示例,见下文:

<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/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.mkyong.core.utils</groupId>
    <artifactId>dateUtils</artifactId>
    <packaging>jar</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>dateUtils</name>
    <url>http://maven.apache.org</url>

    <properties>
        <jdk.version>1.7</jdk.version>
        <jodatime.version>2.5</jodatime.version>
        <junit.version>4.11</junit.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>joda-time</groupId>
            <artifactId>joda-time</artifactId>
            <version>${jodatime.version}</version>
        </dependency>
    </dependencies>

    <build>
        <finalName>dateutils</finalName>

        <resources>
            <resource>
                <directory>src/main/resources</directory>
            </resource>
        </resources>
        <plugins>

            <!-- download source code in Eclipse, best practice -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-eclipse-plugin</artifactId>
                <version>2.9</version>
                <configuration>
                    <downloadSources>true</downloadSources>
                    <downloadJavadocs>false</downloadJavadocs>
                </configuration>
            </plugin>

            <!-- Set a compiler level -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.3.2</version>
                <configuration>
                    <source>${jdk.version}</source>
                    <target>${jdk.version}</target>
                </configuration>
            </plugin>

            <!-- Maven Shade Plugin …
Run Code Online (Sandbox Code Playgroud)

java maven maven-shade-plugin

5
推荐指数
2
解决办法
5529
查看次数

确定 Maven 部署文件的存储库 URL

我正在使用 Maven 来构建一个特定的项目,并且在 POM 中,我正在使用 maven shade 插件构建主要工件的 3 个不同变体(我正在创建具有各种包含日志框架组合的 uber jar)。阴影插件使用替代工件 ID 及其各自的依赖减少的 poms 创建 jar。

我现在面临的挑战是如何将这些新工件部署到我的远程存储库。我正在使用 maven install 插件将它们安装到我的本地 repo,但是 maven deploy 插件需要显式配置存储库 URL。我想要发生的是插件采用默认部署使用的任何远程存储库,无论是快照或发布存储库还是我通过命令行传入的另一个存储库 URL。我希望找到一些像 ${project.remoterepo.url} 这样的 maven 属性,它等同于已解决的 repo。当部署目标已经这样做时,必须显式配置远程 URL 似乎很愚蠢。

任何建议表示赞赏。谢谢!

java maven maven-deploy-plugin maven-shade-plugin

5
推荐指数
1
解决办法
1890
查看次数

捆绑JRE以及可执行jar

我想在我的可执行jar.so中捆绑JRE,这个exe可以在任何系统中运行.我已经尝试过lunch4j来创建捆绑的JRE,但我们需要运送JRE和exe两者.但根据我的要求,我不应该使用任何安装程序.我不应该在客户端机器中提取jre.请帮助有一种方法将JRE放入jar并使其使用.

java packaging bundle exe maven-shade-plugin

5
推荐指数
1
解决办法
6899
查看次数

创建阴影jar时出错:null:IllegalArgumentException

我在项目中使用ASM 6.1动态生成Class文件。但是组装一个胖罐子时我遇到了一个问题。

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-shade-plugin:2.4.3:shade (default-cli) on project uetlx: Error creating shaded jar: null: IllegalArgumentException -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-shade-plugin:2.4.3:shade (default-cli) on project uetlx: Error creating shaded jar: null
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:212)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
        at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116)
        at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80)
        at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)
        at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
        at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:307)
        at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193)
        at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106)
        at org.apache.maven.cli.MavenCli.execute(MavenCli.java:863)
        at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:288)
        at org.apache.maven.cli.MavenCli.main(MavenCli.java:199)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
        at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
        at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
        at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
Caused …
Run Code Online (Sandbox Code Playgroud)

java maven maven-shade-plugin

5
推荐指数
1
解决办法
1989
查看次数

使用所有空手道依赖项创建测试 jar

我有以下项目结构。

  • 源代码/测试/Java

没有 src/main 文件夹。

以上 src/test/java 文件夹包含一些 scala 类以及一些 java 类。当我使用以下插件构建 jar 文件时

  • maven-jar-plugin :它生成测试 jar 文件,但该 jar 文件中不包含依赖项
  • maven-shade-plugin :这个插件生成没有tests后缀的jar文件,并在生成的jar中包含所有的依赖。

请建议

如何生成解压所有依赖项的“测试”jar。或者在这种情况下如何使用 src/test/java 文件夹下的所有类以及测试类所需的所有依赖项生成 jar 文件

java executable-jar maven-jar-plugin maven-shade-plugin karate

5
推荐指数
1
解决办法
465
查看次数