我正在使用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
我有一个 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 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 中。
我尝试了几种不同的配置,但由于某种原因,罐子仍然包含在我的罐子中。这是插件设置:
<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 中排除这个类?
我直接从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中找不到'资源' …
我试图从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) 我在这里关注来自springsource的maven教程,然后1)添加joda-time依赖项,2)调用mvn packagecommmand,我们得到下面的文件dependency-reduced-pom.xml.
我的问题是,除pom.xml文件外创建此文件的目的是什么?

使用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) 每次我运行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)
有问题的错误消息是
[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 clean和mvn 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) maven ×10
java ×6
jar ×2
maven-3 ×2
pom.xml ×2
spring-boot ×2
dependencies ×1
java-10 ×1
opensaml ×1
package ×1