[ https://issues.apache.org/jira/browse/MSHADE-402?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17914073#comment-17914073 ]
Paul Hammant commented on MSHADE-402: ------------------------------------- Bug reproduced in a repo - https://github.com/paul-hammant/shadeTestDepsBug > Shading produces empty test jar > ------------------------------- > > Key: MSHADE-402 > URL: https://issues.apache.org/jira/browse/MSHADE-402 > Project: Maven Shade Plugin > Issue Type: Bug > Affects Versions: 3.2.4 > Reporter: Cédric Champeau > Priority: Major > > Dear maintainers, > I'm working with the shade plugin in the context of a workaround for a > Windows bug: when invoking a CLI in Windows, there's a maximum length that > you can use. The GraalVM `native-image` is invoked on CLI with a "classpath" > argument which easily exceeds that limit. There are several options to > workaround this but in this context, the most promising, which worked for the > Gradle plugin, was to use _shading_. > For the main artifact, this technique works properly: we can use the "shade" > plugin to generate a shaded jar which is then passed to `native-image`. > However, we also have support for _unit test_ execution "as a native image", > which means that we need to build a native image which includes test classes > and the test runtime (e.g JUnit Platform). > Unfortunately, this technique doesn't work for Maven. First of all, let's see > how the build is configured: > {code:xml} > <plugin> > <groupId>org.apache.maven.plugins</groupId> > <artifactId>maven-shade-plugin</artifactId> > <version>3.2.4</version> > <executions> > <execution> > <phase>package</phase> > <goals> > <goal>shade</goal> > </goals> > </execution> > </executions> > <configuration> > <shadedArtifactAttached>true</shadedArtifactAttached> > <shadeTestJar>true</shadeTestJar> > </configuration> > </plugin> > {code} > As you can see, I'm using `shadeTestJar`, but if you run the package phase, > you will see that the resulting jar is _empty_. After trying to figure out > why, it turns out there are 2 different reasons: > * the first one seems to be that you _must_ generate a test jar before hand. > This isn't mentioned in the docs, but I could get a _non empty_ jar by adding > this: > {code:xml} > <plugin> > <groupId>org.apache.maven.plugins</groupId> > <artifactId>maven-jar-plugin</artifactId> > <version>3.2.0</version> > <executions> > <execution> > <goals> > <goal>test-jar</goal> > </goals> > </execution> > </executions> > </plugin> > {code} > * the second problem is that the shaded generated test jar doesn't include > the test dependencies > After debugging, I noticed that the `project.getDependencies()` method did > **not** return the test dependencies. The javadocs for this method state that > they _should_ include the test dependencies, since when this code is > executed, the "test" phase has been executed. Debugging showed me that the > "resolved dependencies" cache was correct, but that a filter only kept the > "runtime" dependencies. The mojo descriptor mentions: > @Mojo( name = "shade", defaultPhase = LifecyclePhase.PACKAGE, threadSafe = > true, requiresDependencyResolution = ResolutionScope.RUNTIME ) > So I guess the problem comes from the "requiresDependencyResolution" value, > which should be set to "TEST" for the test jar to include test dependencies. > However, I suspect that by changing this parameter to TEST, then the _main_ > jar would suddenly start including test dependencies, which isn't expected. > Let me know if my analysis is correct. I'm open to suggestions on how to > workaround this problem. > Thanks! -- This message was sent by Atlassian Jira (v8.20.10#820010)