Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Maven lifecycle participation fix #5238

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Expand Up @@ -3,22 +3,27 @@
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.Set;

import org.apache.maven.model.PluginExecution;
import org.codehaus.plexus.util.xml.Xpp3Dom;

import aQute.bnd.unmodifiable.Lists;
import aQute.bnd.unmodifiable.Sets;

public class PluginExecutions {

static final List<String> PACKAGING_GOALS = Lists.of("jar", "test-jar", "war");
static final Set<String> PACKAGING_GOALS = Sets.of("jar", "test-jar", "war");

private PluginExecutions() {}

public static String defaultClassifier(PluginExecution pluginExecution) {
List<String> goals = pluginExecution.getGoals();

return goals.contains("jar") ? "" : (goals.contains("test-jar") ? "tests" : "");
if (goals.contains("jar") || goals.contains("war")) {
return "";
}
if (goals.contains("test-jar")) {
return "tests";
}
return "";
}

public static String extractClassifier(PluginExecution pluginExecution) {
Expand Down
Expand Up @@ -4,6 +4,7 @@
import static aQute.bnd.maven.lib.executions.PluginExecutions.matchesClassifier;

import java.util.List;
import java.util.Objects;
import java.util.Optional;

import org.apache.maven.AbstractMavenLifecycleParticipant;
Expand Down Expand Up @@ -52,7 +53,7 @@ public class BndPackagingLifecycleParticipant extends AbstractMavenLifecyclePart

public static final String MAVEN_WAR_PLUGIN_ARTIFACT_ID = "maven-war-plugin";

private Logger logger;
private Logger logger;

@Override
public void afterProjectsRead(final MavenSession session) throws MavenExecutionException {
Expand Down Expand Up @@ -86,11 +87,10 @@ public void enableLogging(final Logger logger) {
this.logger = logger;
}

protected Optional<PluginExecution> findMatchingMavenPackagingPluginExecution(Plugin mavenPackagingPlugin,
String classifier) {
return mavenPackagingPlugin.getExecutions()
.stream()
.filter(ex -> matchesClassifier(ex, classifier))
protected Optional<PluginExecution> findMatchingMavenPackagingPluginExecution(
List<PluginExecution> mavenPackagingPluginExecutions, String classifier) {
return mavenPackagingPluginExecutions.stream()
.filter(execution -> matchesClassifier(execution, classifier))
.findFirst();
}

Expand Down Expand Up @@ -119,9 +119,11 @@ protected Plugin getBndMavenPluginFromContainer(final PluginContainer pluginCont
* {@code null} if not present.
*/
protected Plugin getMavenJarPlugin(final Model model) {
final Build build = model.getBuild();
if (build != null) {
return getMavenJarPluginFromContainer(build);
if (Objects.equals(model.getPackaging(), "jar")) {
final Build build = model.getBuild();
if (build != null) {
return getMavenJarPluginFromContainer(build);
}
}
return null;
}
Expand All @@ -139,9 +141,11 @@ protected Plugin getMavenJarPluginFromContainer(final PluginContainer pluginCont
* {@code null} if not present.
*/
protected Plugin getMavenWarPlugin(final Model model) {
final Build build = model.getBuild();
if (build != null) {
return getMavenWarPluginFromContainer(build);
if (Objects.equals(model.getPackaging(), "war")) {
final Build build = model.getBuild();
if (build != null) {
return getMavenWarPluginFromContainer(build);
}
}
return null;
}
Expand All @@ -166,7 +170,6 @@ && nullToEmpty(artifactId).equals(nullToEmpty(plugin.getArtifactId()))) {
}
result = plugin;
}

}
return result;
}
Expand All @@ -176,18 +179,27 @@ protected String nullToEmpty(String str) {
.orElse("");
}

protected void processExecutions(List<PluginExecution> bndMavenPluginExecutions, Plugin mavenPackagingPlugin, MavenProject project) {
protected void processExecutions(List<PluginExecution> bndMavenPluginExecutions, Plugin mavenPackagingPlugin,
MavenProject project) {
bndMavenPluginExecutions.stream()
.filter(PluginExecutions::isPackagingGoal)
.forEach(bndMavenPluginEx -> {
findMatchingMavenPackagingPluginExecution(mavenPackagingPlugin, extractClassifier(bndMavenPluginEx))
.ifPresent(packagingPluginEx -> {
mavenPackagingPlugin.getExecutions()
.remove(packagingPluginEx);

if (logger.isDebugEnabled()) {
logger.debug("Disabled execution of " + packagingPluginEx + " in " + project + " by "
+ THIS_ARTIFACT_ID);
.forEach(bndMavenPluginExecution -> {
String classifier = extractClassifier(bndMavenPluginExecution);
findMatchingMavenPackagingPluginExecution(mavenPackagingPlugin.getExecutions(), classifier)
.ifPresent(execution -> {
List<String> goals = execution.getGoals();
boolean removed = goals.removeIf(goal -> {
if (PluginExecutions.isPackagingGoal(goal)) {
if (logger.isDebugEnabled()) {
logger.debug(THIS_ARTIFACT_ID + " disabled " + mavenPackagingPlugin.getArtifactId()
+ ":" + goal + " (" + execution.getId() + ") @ " + project.getArtifactId());
}
return true;
}
return false;
});
if (removed && goals.isEmpty()) {
mavenPackagingPlugin.removeExecution(execution);
}
});
});
Expand Down