Skip to content
This repository has been archived by the owner on Jun 7, 2021. It is now read-only.

Commit

Permalink
Pull swarm jars out of war when building swarmjar [SWARM-226]
Browse files Browse the repository at this point in the history
This finds the swarm artifacts by looking for
`/META-INF/maven/org.wildfly.swarm` in the artifact, and finds
transitive dependencies by looking for artifacts that are provided by
modules (there is some overlap between those two sets).
  • Loading branch information
tobias committed Dec 23, 2015
1 parent c998bb0 commit 4638d03
Show file tree
Hide file tree
Showing 5 changed files with 75 additions and 15 deletions.
2 changes: 0 additions & 2 deletions tools/src/main/java/org/wildfly/swarm/tools/ArchiveAsset.java
Expand Up @@ -15,8 +15,6 @@
*/
package org.wildfly.swarm.tools;

import java.io.InputStream;

import org.jboss.shrinkwrap.api.Archive;
import org.jboss.shrinkwrap.api.exporter.ZipExporter;

Expand Down
Expand Up @@ -15,6 +15,10 @@
*/
package org.wildfly.swarm.tools;

import org.jboss.shrinkwrap.api.Archive;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.spec.JavaArchive;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
Expand Down Expand Up @@ -47,4 +51,9 @@ public InputStream openStream() {
}
return null;
}

@Override
public Archive<?> getArchive() {
return ShrinkWrap.createFromZipFile(JavaArchive.class, spec.file);
}
}
16 changes: 14 additions & 2 deletions tools/src/main/java/org/wildfly/swarm/tools/ArtifactSpec.java
Expand Up @@ -15,10 +15,10 @@
*/
package org.wildfly.swarm.tools;

import java.io.File;

import org.wildfly.swarm.bootstrap.util.MavenArtifactDescriptor;

import java.io.File;

/**
* @author Bob McWhirter
*/
Expand Down Expand Up @@ -51,6 +51,18 @@ public ArtifactSpec(String scope, String groupId, String artifactId, String vers
this.file = file;
}

public String jarName() {
String classifier = classifier();
if (classifier != null &&
classifier.length() > 0) {
classifier = "-" + classifier;
} else {
classifier = "";
}

return String.format("%s-%s%s.%s", artifactId(), version(), classifier, type());
}

public String toString() {
return mavenGav() + " [" + this.scope + "]";
}
Expand Down
60 changes: 49 additions & 11 deletions tools/src/main/java/org/wildfly/swarm/tools/BuildTool.java
Expand Up @@ -15,9 +15,23 @@
*/
package org.wildfly.swarm.tools;

import org.jboss.shrinkwrap.api.Archive;
import org.jboss.shrinkwrap.api.Node;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.asset.ByteArrayAsset;
import org.jboss.shrinkwrap.api.asset.StringAsset;
import org.jboss.shrinkwrap.api.exporter.ZipExporter;
import org.jboss.shrinkwrap.api.importer.ZipImporter;
import org.jboss.shrinkwrap.api.spec.JavaArchive;
import org.jboss.shrinkwrap.impl.base.asset.ZipFileEntryAsset;
import org.wildfly.swarm.bootstrap.util.WildFlySwarmApplicationConf;
import org.wildfly.swarm.bootstrap.util.WildFlySwarmBootstrapConf;
import org.wildfly.swarm.bootstrap.util.WildFlySwarmDependenciesConf;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Collection;
Expand All @@ -27,17 +41,7 @@
import java.util.Set;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;

import org.jboss.shrinkwrap.api.Archive;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.asset.ByteArrayAsset;
import org.jboss.shrinkwrap.api.asset.StringAsset;
import org.jboss.shrinkwrap.api.exporter.ZipExporter;
import org.jboss.shrinkwrap.api.spec.JavaArchive;
import org.jboss.shrinkwrap.impl.base.asset.ZipFileEntryAsset;
import org.wildfly.swarm.bootstrap.util.WildFlySwarmApplicationConf;
import org.wildfly.swarm.bootstrap.util.WildFlySwarmBootstrapConf;
import org.wildfly.swarm.bootstrap.util.WildFlySwarmDependenciesConf;
import java.util.stream.Collectors;

/**
* @author Bob McWhirter
Expand Down Expand Up @@ -130,6 +134,7 @@ public File build(String baseName, Path dir) throws Exception {

public Archive build() throws Exception {
analyzeDependencies();
removeSwarmDependencies();
addWildflySwarmBootstrapJar();
addWildFlyBootstrapConf();
addManifest();
Expand All @@ -138,13 +143,46 @@ public Archive build() throws Exception {
addWildFlySwarmDependenciesConf();
addAdditionalModules();
populateUberJarMavenRepository();

return this.archive;
}

protected void analyzeDependencies() throws Exception {
this.dependencyManager.analyzeDependencies(this.resolveTransitiveDependencies);
}

protected static final String WEB_INF_LIB = "/WEB-INF/lib/";

protected static final String SWARM_ARTIFACT_MARKER = "/META-INF/maven/org.wildfly.swarm";

protected boolean nodeIsSwarmArtifact(Node node) {
try (final InputStream in = node.getAsset().openStream()) {

return ShrinkWrap.create(ZipImporter.class)
.importFrom(in)
.as(JavaArchive.class)
.contains(SWARM_ARTIFACT_MARKER);
} catch (IOException e) {
throw new RuntimeException(e);
}
}

protected boolean nodeIsInJarList(Node node, Set<String> jarList) {
return jarList.contains(node.getPath().get().substring(WEB_INF_LIB.length()));
}

protected void removeSwarmDependencies() {
final Archive<?> archive = this.projectAsset.getArchive();
final Set<String> moduleJars = this.dependencyManager.getModuleDependencies().stream()
.map(ArtifactSpec::jarName)
.collect(Collectors.toSet());

archive.getContent().values().stream()
.filter(node -> node.getPath().get().startsWith(WEB_INF_LIB))
.filter(node -> nodeIsInJarList(node, moduleJars) || nodeIsSwarmArtifact(node))
.forEach(node -> archive.delete(node.getPath()));
}

private void addWildflySwarmBootstrapJar() throws BuildException, IOException {
ArtifactSpec artifact = this.dependencyManager.findWildFlySwarmBootstrapJar();

Expand Down
3 changes: 3 additions & 0 deletions tools/src/main/java/org/wildfly/swarm/tools/ProjectAsset.java
Expand Up @@ -15,6 +15,7 @@
*/
package org.wildfly.swarm.tools;

import org.jboss.shrinkwrap.api.Archive;
import org.jboss.shrinkwrap.api.asset.NamedAsset;

/**
Expand All @@ -24,6 +25,8 @@ public interface ProjectAsset extends NamedAsset {

String getSimpleName();

Archive<?> getArchive();

default String getName() {
return "_bootstrap/" + getSimpleName();
}
Expand Down

0 comments on commit 4638d03

Please sign in to comment.