标签: maven-shade-plugin

在 Maven Shade 插件中包含依赖项

我正在尝试使用 Apache 的 commons-lang3 创建一个可部署的 jar。但是,我的 Hadoop 所在的 AWS 集群不包含此库,因此我收到了 classNotFoundException。我想我需要手动添加该依赖项,但我在使用 Maven Shade 插件时遇到问题(建议我使用这个)我当前的 pom 文件如下所示:

    <dependency>
        <groupId>org.apache.pig</groupId>
        <artifactId>pig</artifactId>
        <version>0.12.0-cdh5.2.6</version>
    </dependency>

    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
        <version>3.4</version>
    </dependency>
    <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>2.4.3</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <artifact>org.apache.commons:commons-lang3</artifact>
                                <includes>
                                    <include>org/apache/commons/commons-lang3/3.4/*</include>
                                </includes>
                        <minimizeJar>true</minimizeJar>
                    </configuration>
                </execution>
            </executions>

        </plugin>
Run Code Online (Sandbox Code Playgroud)

我想要一个完全正常的 jar,其中嵌入了 commons-lang3 库。我做错了什么吗?

java apache maven maven-shade-plugin

3
推荐指数
1
解决办法
1万
查看次数

使用带有minimizeJar = true的阴影时出现NullPointerException

当使用 shade 和 minimumJar 时,我从 shade 插件中得到一个 NullpointerException 。

在下面的示例中,我定义了两个依赖项;junit 和 commons-lang3,在我的代码中只使用来自 commons-lang3 - 的单个类StringUtils。我对 shade 文档的理解是未使用的类不会包含在阴影 jar 中,所以我希望阴影 jar 只包含我的类和 StringUtils。

运行时,mvn clean package我得到以下输出(此问题末尾包含 mvn clean package -X 的完整输出):

[错误] 无法执行目标 org.apache.maven.plugins:maven-shade-plugin:2.4.3:shade (default) on project shade: Error creation shaded jar: null: NullPointerException -> [Help 1]

这是在使用以下版本运行时:

mvn -version
Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-10T16:41:47+00:00)
Maven home: /usr/local/Cellar/maven/3.3.9/libexec
Java version: 1.8.0, vendor: Oracle Corporation
Java home: /Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents/Home/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "mac os …
Run Code Online (Sandbox Code Playgroud)

java maven maven-shade-plugin

3
推荐指数
1
解决办法
3346
查看次数

Maven:使用指定主类和属性文件的 shade-plugin 编译项目

Maven 新手,我试图使用 Maven 和 maven-shade-plugin 编译一个项目(因为它似乎是构建一个胖 jar 的最佳插件)。我试图指定我的主类来制作一个可运行的 jar 文件和一些包含翻译字符串的 .properties 文件。

根据 netbeans 输出,编译和构建似乎已通过,但我无法按以下方式运行它(假设由 Maven 构建的 jar 重命名为“程序”):

/usr/bin/java -cp program.jar bot.Main
> could not find or load main class bot.Main
Run Code Online (Sandbox Code Playgroud)

这是我的项目文件结构:

项目文件

这是我的 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.mycompany</groupId>
<artifactId>mavenproject1</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<build>
    <resources>
    <resource>
        <directory>src/main/java/resources</directory>
        <includes>
            <include>**/*.properties</include>
        </includes>
    </resource>
</resources>
<plugins>

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>2.4.3</version>
    <configuration>
      <archive>
      <manifest>
        <addClasspath>true</addClasspath>
        <classpathPrefix>lib/</classpathPrefix>
        <mainClass>bot.Main</mainClass>
      </manifest>
    </archive>
    <shadedArtifactAttached>true</shadedArtifactAttached>
    <shadedClassifierName>launcher</shadedClassifierName>
    </configuration>
    <executions>
      <execution>
        <phase>package</phase>
        <goals>
          <goal>shade</goal>
        </goals> …
Run Code Online (Sandbox Code Playgroud)

java maven maven-shade-plugin

3
推荐指数
1
解决办法
6025
查看次数

故障安全错误:使用阴影插件时“清单主要属性的签名文件摘要无效”

在 maven 中使用 shade-plugin 并稍后尝试使用 failsafe-plugin 运行集成测试时,当故障安全即将运行时,我收到以下错误,导致我的集成测试被跳过:

[ERROR] Invalid signature file digest for Manifest main attributes
Run Code Online (Sandbox Code Playgroud)

此错误似乎是由依赖项中的签名 jar 引起的。这个答案建议使用依赖插件过滤掉签名,但它似乎对我不起作用。Shade-plugin 只是解压了所有的依赖,并没有解决问题。我怎样才能使这项工作?

jar maven maven-failsafe-plugin maven-shade-plugin

3
推荐指数
1
解决办法
503
查看次数

Maven 阴影插件无法将 Spring Boot 版本从 2.3.3 更新到 2.4.0

我刚刚将项目中的 Spring Boot 版本从 2.3.3 更新到 2.4.0。

对于我项目中的模块,我使用maven-shade-plugin简单的阴影目标,无需配置。当我使用 Spring Boot 2.3.3 时,一切都很顺利。2.4.0 的更新似乎要求我提供一个我无法加载的配置。

我从这篇文章中完成了所需的配置,但这对我没有帮助。

这是我现在所拥有的。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <dependencies>
        <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <version>2.4.0</version>
    </dependency>
    </dependencies>
    <executions>
        <!-- Run shade goal on package phase -->
        <execution>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>
            <configuration>
                <transformers>
                    <transformer
                            implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                        <resource>META-INF/spring.handlers</resource>
                    </transformer>
                    <transformer
                            implementation="org.springframework.boot.maven.PropertiesMergingResourceTransformer">
                        <resource>META-INF/spring.factories</resource>
                    </transformer>
                    <transformer
                            implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                        <resource>META-INF/spring.schemas</resource>
                    </transformer>
                    <transformer
                            implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
                </transformers>
            </configuration>
        </execution>
    </executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)

我没有主类,因为这个模块的行为就像客户端(招摇生成的东西)。

我用maven构建的时候报错如下:

Failed to execute goal org.apache.maven.plugins:maven-shade-plugin:3.2.1:shade (default) on project zenzefi-client: Unable to parse configuration of mojo …
Run Code Online (Sandbox Code Playgroud)

java maven maven-shade-plugin spring-boot

3
推荐指数
1
解决办法
3719
查看次数

配置maven-shade-plugin以包含src/main/webapp

我正在使用一个简单的项目,标准位置的webapp目录(src/main/webapp).出于某种原因,看起来maven-shade-plugin在最终生成的jar中不包含它 - 默认情况下它只包含工件src/main/resources.我试过使用以下配置,没有运气:

<configuration>
 <artifactSet>
  <includes>
   <include>*</include>
   <include>*:*</include>
  </includes>
 </artifactSet>
</configuration>
Run Code Online (Sandbox Code Playgroud)

有关如何做到这一点的任何建议,而无需将src/main/webapp移动到src/main/resources/webapp?

谢谢.

尤金.

jetty war embedded-jetty maven maven-shade-plugin

2
推荐指数
1
解决办法
5156
查看次数

m2e阴影蚀"项目主要工件不存在"

我正在尝试创建一个部署包,它将我的maven模块的所有依赖项捆绑到eclipse中的另一个maven项目.

我在我的pom.xml中有这个

<modelVersion>4.0.0</modelVersion>
<groupId>com.my.proj</groupId>
<artifactId>AAA</artifactId>
<version>0.0.2-SNAPSHOT</version>
<name>btc</name>
<dependencies>
    <dependency>
        <groupId>com.another.proj</groupId>
        <artifactId>BBB</artifactId>
        <version>1.4-SNAPSHOT</version>
    </dependency>
</dependencies>

<build>
    <plugins>

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>1.6</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <transformers>
                            <transformer
                                implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                <mainClass>com.group.id.Launcher1</mainClass>
                            </transformer>
                        </transformers>
                    </configuration>
                </execution>
            </executions>
        </plugin>

    </plugins>
</build>
Run Code Online (Sandbox Code Playgroud)

我在eclipse中使用"m2 Maven Build",其目标是"org.apache.maven.plugins:maven-shade-plugin:shade"和"Resolve Workspace artifacts".

它失败了

--- maven-shade-plugin:1.6:shade (default-cli) @ AAA ---
[ERROR] The project main artifact does not exist. This could have the following
[ERROR] reasons:
[ERROR] - You have invoked the goal directly from the command line. This is …
Run Code Online (Sandbox Code Playgroud)

eclipse maven-2 m2e maven-shade-plugin

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

Maven Shade插件未附加阴影工件

我正在尝试使用maven-shade-plugin来区分Java 6和Java 7工件。我从此链接的理解是,原始的工件将被阴影部分代替

[INFO] Replacing original artifact with shaded artifact.
[INFO] Replacing /Users/carlos/path/Libraries/xml/target/xml-1.5.0-SNAPSHOT.jar with /Users/carlos/path/Libraries/xml/target/xml-1.5.0-SNAPSHOT-SHADED.jar
[INFO] Replacing original test artifact with shaded test artifact.
[INFO] Replacing /Users/carlos/path/Libraries/xml/target/xml-1.5.0-SNAPSHOT-tests.jar with /Users/carlos/path/Libraries/xml/target/xml-1.5.0-SNAPSHOT-SHADED-tests.jar
[INFO] Dependency-reduced POM written at: /Users/carlos/path/Libraries/xml/dependency-reduced-pom.xml
[INFO] 
[INFO] --- maven-install-plugin:2.4:install (default-install) @ xml ---
[INFO] Installing /Users/carlos/path/Libraries/xml/target/xml-1.5.0-SNAPSHOT.jar to /Users/carlos/.m2/repository/com/company/xml/1.5.0-SNAPSHOT/xml-1.5.0-SNAPSHOT.jar
[INFO] Installing /Users/carlos/path/Libraries/xml/dependency-reduced-pom.xml to /Users/carlos/.m2/repository/com/company/xml/1.5.0-SNAPSHOT/xml-1.5.0-SNAPSHOT.pom
[INFO] Installing /Users/carlos/path/Libraries/xml/target/xml-1.5.0-SNAPSHOT-tests.jar to /Users/carlos/.m2/repository/com/company/xml/1.5.0-SNAPSHOT/xml-1.5.0-SNAPSHOT-tests.jar
[INFO] Installing /Users/carlos/path/Libraries/xml/target/xml-1.5.0-SNAPSHOT-sources.jar to /Users/carlos/.m2/repository/com/company/xml/1.5.0-SNAPSHOT/xml-1.5.0-SNAPSHOT-sources.jar
[INFO] Installing /Users/carlos/path/Libraries/xml/target/xml-1.5.0-SNAPSHOT-tests.jar to /Users/carlos/.m2/repository/com/company/xml/1.5.0-SNAPSHOT/xml-1.5.0-SNAPSHOT-tests.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: …
Run Code Online (Sandbox Code Playgroud)

maven maven-shade-plugin

2
推荐指数
1
解决办法
3592
查看次数

Dropwizard:无法在以下位置解析配置:logging.appenders

当我使用"java -jar target\helloDropwizard-1.0-SNAPSHOT.jar服务器"运行基本的Dropwizard.io(v0.8.1)项目时,我收到错误"无法解析配置:logging.appenders".

完整的错误消息:

Failed to parse configuration at: logging.appenders.[0]; 
Could not resolve type id 'console' into a subtype of [simple type, class io.dropwizard.logging.AppenderFactory]: known type ids = [AppenderFactory] at [Source: N/A; line: -1, column: -1] (through reference chain: io.dropwizard.
Configuration["logging"]->io.dropwizard.logging.LoggingFactory["appenders"]->java.util.ArrayList[0])
Run Code Online (Sandbox Code Playgroud)

我的pom.xml

<properties>
    <dropwizard.version>0.8.1</dropwizard.version>
</properties>

<dependencies>

    <!-- Dropwizard -->
    <dependency>
        <groupId>io.dropwizard</groupId>
        <artifactId>dropwizard-core</artifactId>
        <version>${dropwizard.version}</version>
    </dependency>

    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>3.8.1</version>
        <scope>test</scope>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
                <encoding>UTF-8</encoding>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>2.3</version>
            <configuration>
                <filters>
                    <filter> …
Run Code Online (Sandbox Code Playgroud)

java maven maven-shade-plugin dropwizard

2
推荐指数
1
解决办法
1909
查看次数

将 SpringBoot 配置添加为 &lt;dependencyManagement&gt; 标签时如何使用 maven-shade-plugin 的“PropertiesMergingResourceTransformer”

我正在使用 maven-shade-plugin 和 Sprint Boot。我将 spring-boot 依赖项定义为:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>2.0.2.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
Run Code Online (Sandbox Code Playgroud)

我已经在 pom.xml 的标签中定义了项目特定的 uber-pom <parent>,因此无法spring-boot-starter-parent<parent>标签中使用。

现在,当我这样做时mvn clean install,我得到以下异常:

`[ERROR] Failed to execute goal org.apache.maven.plugins:maven-shade-plugin:3.1.1:shade (default) on project myapp: Unable to parse configuration of mojo org.apache.maven.plugins:maven-shade-plugin:3.1.1:shade for parameter transformers: Cannot load implementation hint 'org.springframework.boot.maven.PropertiesMergingResourceTransformer'`, 
Run Code Online (Sandbox Code Playgroud)

PropertiesMergingResourceTransformer这清楚地表明无法找到实施。如果我使用标签中定义的 Spring-boot 配置<parent>,它工作得很好。

但是,如果我完全删除PropertiesMergingResourceTransformermaven-shade-plugin 配置中的配置,则无法执行捆绑的 jar,并给出如下异常:

`java.lang.IllegalArgumentException: No auto configuration classes found in META-INF/spring.factories. If you are …
Run Code Online (Sandbox Code Playgroud)

java spring maven maven-shade-plugin spring-boot

2
推荐指数
1
解决办法
5744
查看次数

Spark with Pureconfig - 正确的 Maven 阴影插件配置

我有与此处描述的完全相同的问题: Spark notworking with pureconfig。上述问题的唯一答案似乎是合理的,但我正在使用 Maven 而不是 sbt,并且我无法将发布的解决方案从 sbt 转换为 Maven。

我尝试过类似以下的操作:

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.0.0</version>
<executions>
    <execution>
        <phase>package</phase>
        <goals>
            <goal>shade</goal>
        </goals>
    </execution>
</executions>
<configuration>
    <createDependencyReducedPom>false</createDependencyReducedPom>
    <relocations>
        <relocation>
            <pattern>com.chuusai:shapeless_2.11:2.3.2</pattern>
            <shadedPattern>com.matek.shaded.com.chuusai:shapeless_2.11:2.3.2</shadedPattern>
        </relocation>
        <relocation>
            <pattern>com.chuusai:shapeless_2.11:2.0.0</pattern>
            <shadedPattern>com.matek.shaded.com.chuusai:shapeless_2.11:2.0.0</shadedPattern>
        </relocation>
        <relocation>
            <pattern>com.github.pureconfig</pattern>
            <shadedPattern>com.matek.shaded.com.github.pureconfig</shadedPattern>
            <excludes>
                <exclude>com.chuusai:shapeless_2.11:2.3.2</exclude>
            </excludes>
            <includes>
                <include>com.matek.shaded.com.chuusai:shapeless_2.11:2.3.2</include>
            </includes>
        </relocation>
    </relocations>
</configuration>
Run Code Online (Sandbox Code Playgroud)

但毫不奇怪,这不起作用(我什至不确定它是否正确)。如何指定 Maven Shade 插件配置以使其与 Spark Submit 一起使用?

scala maven sbt maven-shade-plugin apache-spark

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

Java getClass().getClassLoader().getResource(path) 在 Maven 阴影 .jar 中失败

当直接使用 运行我的项目时java,我可以确认特定方法能够通过getClass().getClassLoader().getResource(path)获取资源,其中pathdocs/info.md并且存在一个文件src/main/resources/docs/info.md

当项目用 Maven 打包成最终的可执行文件 .jar 后,我可以docs/info.md通过以下方式确认路径已被包含jar tf myproject.jar

但是,当执行该 .jar 时,相同的getClass().getClassLoader().getResource(path)返回 null。

这是myproject.pom

<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
         xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>

  <!-- io.outright.myproject [parent] -->
  <parent>
    <groupId>io.outright</groupId>
    <artifactId>myproject</artifactId>
    <version>1.0-SNAPSHOT</version>
  </parent>

  <!-- io.outright.myproject -->
  <groupId>io.outright.myproject</groupId>
  <artifactId>hub</artifactId>
  <version>1.0-SNAPSHOT</version>
  <name>hub</name>

  <!-- props -->
  <properties>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <!-- deps -->
  <dependencies>

     <!-- ....removed for readability.... -->

  </dependencies>

  <!-- build -->

  <build>

    <resources>
      <resource>
        <directory>${basedir}/src/main/resources</directory>
        <includes> …
Run Code Online (Sandbox Code Playgroud)

java jar maven maven-jar-plugin maven-shade-plugin

0
推荐指数
1
解决办法
3548
查看次数