标签: maven-shade-plugin

如何跳过maven antrun copy/shade:动态阴影目标?

我正在使用maven来配置由多个小服务组成的应用程序.在java中开发的大多数服务共享相同的maven配置,就像在相同的构建生命周期中一样,共享资源(如spring AMQP).

所以我在SuperPom中组织了共享资源.

虽然阴影插件似乎并没有真正干扰安装过程,但是antrun插件当然不会找到它应该复制的任何文件,因为没有通过shade插件创建任何jar文件.

由于我想要在SuperPom中抽象出shade/antrun插件的配置,我需要跳过阴影/复制目标.

我已经试过mvn clean install -Dmaven.shade.skip=true,mvn clean install -Dmaven.copy.skip=true,mvn clean install -Dmaven.shade.shade.skip=true

这是一个小样本供您玩:

<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>Test</groupId>
    <artifactId>SuperTest</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>
    <properties>
        <log4j.version>1.2.17</log4j.version>
        <destination>pleasedeleteme</destination>
        <mainpackage>com.uk.cc.it.info.gov.test.xxx</mainpackage>
    </properties>

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>2.2</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <transformers>
                                <transformer
                                    implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                    <mainClass>${mainpackage}.Main</mainClass>
                                </transformer>
                            </transformers>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>2.8</version>
                <executions>
                    <execution>
                        <id>copy</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy</goal>
                        </goals>
                        <configuration>
                            <artifactItems> …
Run Code Online (Sandbox Code Playgroud)

java maven maven-shade-plugin maven-antrun-plugin maven-lifecycle

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

如何在 maven 中引用阴影 jar

我有一个 mavne 项目,在本地仓库中安装了一个带阴影的 jar。在 repo 中,有 jar 和 shaded jar :

myjar-1.0-shaded.jar

myjar-1.0.jar

myjar-1.0.pom

在另一个 Maven 项目中,我想向那个阴影 jar 添加依赖项

我该怎么做 ?

我试过

<dependency>
    <groupId>mygroup</groupId>
    <artifactId>myjar</artifactId>
    <version>1.0-shaded</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

但它不起作用,只是找不到罐子。

当然直接使用 1.0 版本会发现那个 jar 但会引起一些包冲突。

不确定依赖阴影罐是否是个好主意,但就我而言,我必须这样做。如果有人能弄清楚如何解决这个问题,我将不胜感激。

maven maven-shade-plugin

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

maven shaded jar:改变输出位置

我在使用Maven Shade插件时遇到了困难,因为我希望将我的阴影jar安装到与父pom相同的文件夹中(而不是本地src/target目录).

布局:maven_project

guide/
   parent_pom.xml
projA/
   pom.xml
projB/
   pom.xml
   /target
      original-projB-0.0.3.jar
      projB-0.0.3.jar (shaded jar) 
Run Code Online (Sandbox Code Playgroud)

我必须导出项目并使其他人更容易运行可执行jar我想将着色jar重定位到该guide文件夹.

不幸的是,我尝试过使用

<outputDirectory>/home/name/Desktop/maven_project/guide/</outputDirectory>    
Run Code Online (Sandbox Code Playgroud)

但这只会将原始jar移动到目录中.

问题:关于如何在那里移动阴影罐的任何想法(甚至删除过程中的原始jar)?

jar pom.xml maven-3 maven maven-shade-plugin

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

将类排除在阴影 Jar 中

我试图排除某些类被包含在阴影 jar 中。

我尝试了几种不同的配置,但由于某种原因,罐子仍然包含在我的罐子中。这是插件设置:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>2.4.2</version>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <filters>
            <filter>
                <artifact>*:*</artifact>
                <excludes>
                    <exclude>META-INF/*.SF</exclude>
                    <exclude>META-INF/*.DSA</exclude>
                    <exclude>META-INF/*.RSA</exclude>
                    <exclude>java/*</exclude>
                </excludes>
            </filter>
        </filters>
    </configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)

我还尝试了以下模式:

<exclude>java.*</exclude>
<exclude>java.util.concurrent.ConcurrentHashMap</exclude>
<exclude>java/util/concurrent/ConcurrentHashMap</exclude>
Run Code Online (Sandbox Code Playgroud)

其中没有一个实际上从我的 jar 中排除了该文件。如何从我的 jar 中排除这个类?

java jar maven maven-shade-plugin

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

maven-shade-plugin - 在类org.apache.maven.plugins.shade.resource.ManifestResourceTransformer中找不到'resource'

我直接从apache maven文档https://maven.apache.org/plugins/maven-shade-plugin/examples/resource-transformers.html复制了maven shade插件的配置

这是我目前的设置:

      <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>3.1.0</version>
    <executions>
      <execution>
        <goals>
          <goal>shade</goal>
        </goals>
        <configuration>
          <transformers>
            <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
              <manifestEntries>
                <Main-Class>com.my.app.MainClass</Main-Class>
                <X-Compile-Source-JDK>1.8</X-Compile-Source-JDK>
                <X-Compile-Target-JDK>1.8</X-Compile-Target-JDK>
              </manifestEntries>
            </transformer>
            <transformer implementation="org.apache.maven.plugins.shade.resource.DontIncludeResourceTransformer">
                <resource>.properties</resource>
            </transformer>
            <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                <resource>META-INF/spring.handlers</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.AppendingTransformer">
                <resource>META-INF/spring.tooling</resource>
            </transformer>
            <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                <resource>META-INF/spring.factories</resource>
            </transformer>              
          </transformers>
        </configuration>
      </execution>
    </executions>
  </plugin>
Run Code Online (Sandbox Code Playgroud)

我收到了以下错误:

[错误]无法执行目标org.apache.maven.plugins:maven-shade-plugin:3.1.0:shamp(默认)项目cpms-batch:无法解析mojo的配置org.apache.maven.plugins:maven -shade-plugin:3.1.0:参数资源的阴影:在类org.apache.maven.plugins.shade.resource.ManifestResourceTransformer中找不到'resource' - > [Help 1] org.apache.maven.lifecycle.LifecycleExecutionException:无法执行目标org.apache.maven.plugins:maven-shade-plugin:3.1.0:shamp(默认)项目cpms-batch:无法解析mojo的配置org.apache.maven.plugins:maven-shade-插件:3.1.0:参数资源的阴影:无法在org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java)的org.apache.maven.plugins.shade.resource.ManifestResourceTransformer类中找到'resource'. 212)org.apache.maache.life.internal.MojoExecutor.execute(MojoExecutor.java:153)org.apache.maache.life.internal.MojoExecutor.execute(MojoExecutor.java:145)org.apache.m上的org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)aven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116)位于org.apache.maven.life.internal.builder的org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80). singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:307) org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193)org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106)org.apache.maven.cli.MavenCli.execute(MavenCli.java) :863)org.apache.maven.cli.MavenCli.doMain(MavenCli.java:288)at org.apache.maven.cli.MavenCli.main(MavenCli.java:199)at sun.reflect.NativeMethodAccessorImpl.invoke0( sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces)sorImpl.java:43)在org.codehaus.plexus的org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)的java.lang.reflect.Method.invoke(Method.java:498) .classworlds.launcher.Launcher.launch(Launcher.java:229)org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:356)引起:org.apache.maven.plugin.PluginConfigurationException:无法解析mojo的配置org.apache.maven.plugins:maven-shade-plugin:3.1.0:shade for parameter resource:不能在org.apache.maven.plugin.internal上的org.apache.maven.plug.sternal.DefaultMavenPluginManager.populatePluginFields(DefaultMavenPluginManager.java:662)的org.apache.maven.plugins.shade.resource.ManifestResourceTransformer类中找到'resource' .DefaultMavenPluginManager.getConfiguredMojo(DefaultMavenPluginManager.java:594)org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPlug)inManager.java:121)org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:207)... 20更多引起:org.codehaus.plexus.component.configurator.ComponentConfigurationException:找不到' org.codehaus.plexus.component中的org.eapp.sisu.plex上的org.eclipse.sisu.plexus.CompositeBeanHelper.setProperty(CompositeBeanHelper.java:252)中的org.apache.maven.plugins.shade.resource.ManifestResourceTransformer中的资源'orc.codehaus.plexus.component.confonent.converters.composite位于org.codehaus.plexus.component.confonent.converters. .AbstractCollectionConverter.fromChildren(AbstractCollectionConverter.java:54)位于org.eclipse.sisu.plexus.CompositeBeanHelp的org.codehaus.plexus.component.configurator.converters.composite.ArrayConverter.fromConfiguration(ArrayConverter.java:52)org.eclipse.sisu.plexus.CompositeBeanHelper.setProperty(CompositeBeanHelper.java:210)中的er.convertProperty(CompositeBeanHelper.java:273)位于org.codehaus.plexus.component.configurator.converters.composite.ObjectWithFieldsConverter.processConfiguration(ObjectWithFieldsConverter. java:101)atg.caphaus.plexus.component.configureComponent的一个org.cadhaus.plexus.component.configure.confit上的org.apache.maven.polurator.configure.BericComponent.FopginPinginFields(DefaultMavenPluginManager.java:632)... 23更多[错误]

我已经看到有关该错误的多个问题没有答案: 参数资源的阴影:在类org.apache.maven.plugins.shade.resource.ManifestResourceTransformer中找不到'资源' …

maven maven-shade-plugin spring-boot

4
推荐指数
3
解决办法
8156
查看次数

maven-shade-plugin错误:在"资源"的org.apache.maven.plugins.shade.resource.ManifestResourceTransformer中找不到setter,adder和field

我试图从Spring Boot运行Hello World示例.当我在模块上运行'mvn package'时,我收到以下错误: -

[错误]无法执行目标org.apache.maven.plugins:maven-shade-plugin:2.1:项目上的shade(默认)spring.boot:无法解析mojo的配置org.apache.maven.plugins:maven-> shade-> plugin:2.1:参数变换器的阴影:在'资源'的org.apache.maven.plugins.shade.resource.ManifestResourceTransformer中找不到setter,adder和field字段 - > [Help 1]

我没有使用任何"资源"属性,但它似乎抱怨这一点.知道我在这里做错了什么

这是模块的pom: -

<?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/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>org.springframework</groupId>
    <artifactId>spring.boot</artifactId>
    <version>0.1.0</version>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.0.1.RELEASE</version>
    </parent>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <transformers>
                                <transformer
                                    implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                    <manifestEntries>
                                        <Main-Class>hello.SampleController</Main-Class>
                                    </manifestEntries>
                                </transformer>
                            </transformers>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>
Run Code Online (Sandbox Code Playgroud)

java maven-3 maven maven-shade-plugin spring-boot

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

什么是在调用maven包命令时创建的`dependency-reduced-pom.xml`文件?

我在这里关注来自springsource的maven教程,然后1)添加joda-time依赖项,2)调用mvn packagecommmand,我们得到下面的文件dependency-reduced-pom.xml.

我的问题是,除pom.xml文件外创建此文件的目的是什么?

在此输入图像描述

dependencies package pom.xml maven maven-shade-plugin

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

如何阻止maven-shade-plugin阻止opensaml-impl类型的java.util.ServiceLoader初始化

使用OpenSAML 3时,必须首先opensaml-saml-impl使用以下代码行从工件加载组件:

InitializationService.initialize();
Run Code Online (Sandbox Code Playgroud)

用于java.util.ServiceLoader加载任何实现的类型Initializer.

当我编写测试并运行它时mvn integration-test,这工作正常,我可以看到所有内容都已加载:

Assert.assertTrue(
    XMLObjectProviderRegistrySupport
        .getUnmarshallerFactory()
        .getUnmarshallers()
        .size() > 400);
Run Code Online (Sandbox Code Playgroud)

但是,我的项目使用maven-shade-plugin.如果我将代码打包到超级jar中,则上述条件正确:

mvn package
java -jar /path/to/my.jar
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我观察到只有9 unmarshallers已加载(这些opensaml-core,而不是那些在opensaml-saml-impl然而,当我看的输出.mvn package我可以看到,类型包含在阴影罐子:

[INFO] Including org.opensaml:opensaml-saml-impl:jar:3.2.0 in the shaded jar.
[INFO] Including org.opensaml:opensaml-profile-api:jar:3.2.0 in the shaded jar.
[INFO] Including org.opensaml:opensaml-messaging-api:jar:3.2.0 in the shaded jar.
[INFO] Including org.opensaml:opensaml-saml-api:jar:3.2.0 in the shaded jar.
[INFO] Including org.opensaml:opensaml-xmlsec-api:jar:3.2.0 in the shaded jar.
[INFO] Including …
Run Code Online (Sandbox Code Playgroud)

java maven opensaml maven-shade-plugin

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

Maven Shade插件删除“原始”

每次我运行maven软件包来生成更新的jar时,它都会创建一个“原始” jar文件以及更新的jar文件。

由于我会自动运行已编译的jar,并且它们都试图启动,因此这对我来说尤其是个问题。

我要创建的只是生成的$ {project.artifactId}-$ {project.version} -shaded.jar文件,而不是“原始”文件。有没有一种方法可以不进行备份就将其覆盖(我假设这就是它的作用)?

我该如何解决?

这是我的pom:

<groupId>com.spiromarshes</groupId>
<artifactId>LiveDebugTest</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>

<name>LiveDebugTest</name>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<build>
    <defaultGoal>clean package</defaultGoal>
    <plugins>
        <plugin>
            <version>3.6.1</version>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
        <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>
                    <configuration>
                        <minimizeJar>true</minimizeJar>
                        <outputDirectory>${dir}</outputDirectory>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
        </resource>
    </resources>
</build>

<repositories>
    <repository>
        <id>spigotmc-repo</id>
        <url>https://hub.spigotmc.org/nexus/content/groups/public/</url>
    </repository>
    <repository>
        <id>sonatype</id>
        <url>https://oss.sonatype.org/content/groups/public/</url>
    </repository>
</repositories>

<dependencies>
    <dependency>
        <groupId>org.spigotmc</groupId>
        <artifactId>spigot-api</artifactId>
        <version>1.12.2-R0.1-SNAPSHOT</version>
        <scope>provided</scope>
    </dependency>
</dependencies>
Run Code Online (Sandbox Code Playgroud)

java maven maven-shade-plugin

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

Maven Shade插件无法执行目标?

有问题的错误消息是

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-shade-plugin:3.1.0:shade (default) on project myapp-core: Error creating shaded jar: null: IllegalArgumentException -> [Help 1]
Run Code Online (Sandbox Code Playgroud)

mvn package该在myapp-core文件夹中。mvn cleanmvn compile做工精细。我的项目结构是

myapp/
    myapp-acceptance-tests/
    myapp-core/
        pom.xml
    pom.xml
Run Code Online (Sandbox Code Playgroud)

并且myapp/pom.xml

<groupId>com.myself.myapp</groupId>
<artifactId>myapp</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<modules>
    <module>myapp-core</module>
    <module>myapp-acceptance-tests</module>
</modules>

<properties>
    <maven.compiler.source>10</maven.compiler.source>
    <maven.compiler.target>10</maven.compiler.target>
</properties>

<dependencies>
    ...
</dependencies>
Run Code Online (Sandbox Code Playgroud)

并且myapp/myapp-core/pom.xml

<artifactId>myapp-core</artifactId>
<packaging>jar</packaging>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <mainClass>myself.myapp.Main</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>10</source>
                <target>10</target> …
Run Code Online (Sandbox Code Playgroud)

java maven maven-shade-plugin java-10

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