aboutsummaryrefslogtreecommitdiffstats
path: root/bundle-plugin
diff options
context:
space:
mode:
authorBjørn Christian Seime <bjorncs@verizonmedia.com>2020-06-24 13:49:56 +0200
committerBjørn Christian Seime <bjorncs@verizonmedia.com>2020-06-24 13:49:56 +0200
commit9ef4dd059567e7ba2108e50fd0c851178982006c (patch)
treeb9cbd8c9a63a0ed4df47b904f94f6118c8e4d5ed /bundle-plugin
parent1f1876624de0ca909a366fa16db97a34a686ae42 (diff)
Implement goal for assembling test bundles
Introduce an abstract class containing behaviour that is shared with existing bundle assemble goal. Add abstract
Diffstat (limited to 'bundle-plugin')
-rw-r--r--bundle-plugin/src/main/java/com/yahoo/container/plugin/mojo/AbstractAssembleBundleMojo.java96
-rw-r--r--bundle-plugin/src/main/java/com/yahoo/container/plugin/mojo/AssembleContainerPluginMojo.java107
-rw-r--r--bundle-plugin/src/main/java/com/yahoo/container/plugin/mojo/AssembleTestBundleMojo.java38
3 files changed, 147 insertions, 94 deletions
diff --git a/bundle-plugin/src/main/java/com/yahoo/container/plugin/mojo/AbstractAssembleBundleMojo.java b/bundle-plugin/src/main/java/com/yahoo/container/plugin/mojo/AbstractAssembleBundleMojo.java
new file mode 100644
index 00000000000..622cb9a49b0
--- /dev/null
+++ b/bundle-plugin/src/main/java/com/yahoo/container/plugin/mojo/AbstractAssembleBundleMojo.java
@@ -0,0 +1,96 @@
+// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.container.plugin.mojo;
+
+import com.yahoo.container.plugin.util.Files;
+import com.yahoo.container.plugin.util.JarFiles;
+import org.apache.maven.archiver.MavenArchiveConfiguration;
+import org.apache.maven.archiver.MavenArchiver;
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugins.annotations.Parameter;
+import org.apache.maven.project.MavenProject;
+import org.codehaus.plexus.archiver.jar.JarArchiver;
+
+import java.io.File;
+import java.nio.channels.Channels;
+import java.nio.file.Path;
+import java.util.Collection;
+import java.util.Enumeration;
+import java.util.jar.JarEntry;
+import java.util.jar.JarFile;
+import java.util.zip.ZipEntry;
+
+/**
+ * @author bjorncs
+ */
+abstract class AbstractAssembleBundleMojo extends AbstractMojo {
+
+ @Parameter(defaultValue = "${project}")
+ MavenProject project;
+
+ @Parameter(defaultValue = "${session}", readonly = true, required = true)
+ MavenSession session;
+
+ @Parameter
+ MavenArchiveConfiguration archiveConfiguration = new MavenArchiveConfiguration();
+
+ void addDirectory(JarArchiver jarArchiver, Path directory) {
+ if (java.nio.file.Files.isDirectory(directory)) {
+ jarArchiver.addDirectory(directory.toFile());
+ }
+ }
+
+ void createArchive(JarArchiver jarArchiver, Path jarFile, Path manifestFile) throws MojoExecutionException {
+ archiveConfiguration.setForced(true); // force recreating the archive
+ archiveConfiguration.setManifestFile(manifestFile.toFile());
+ MavenArchiver mavenArchiver = new MavenArchiver();
+ mavenArchiver.setArchiver(jarArchiver);
+ mavenArchiver.setOutputFile(jarFile.toFile());
+ try {
+ mavenArchiver.createArchive(session, project, archiveConfiguration);
+ } catch (Exception e) {
+ throw new MojoExecutionException("Error creating archive " + jarFile.toFile().getName(), e);
+ }
+ }
+
+ void addArtifacts(JarArchiver jarArchiver, Collection<Artifact> artifacts) {
+ for (Artifact artifact : artifacts) {
+ if ("jar".equals(artifact.getType())) {
+ jarArchiver.addFile(artifact.getFile(), "dependencies/" + artifact.getFile().getName());
+ copyConfigDefinitions(artifact.getFile(), jarArchiver);
+ } else {
+ getLog().warn("Unknown artifact type " + artifact.getType());
+ }
+ }
+ }
+
+ private void copyConfigDefinitions(File file, JarArchiver jarArchiver) {
+ JarFiles.withJarFile(file, jarFile -> {
+ for (Enumeration<JarEntry> entries = jarFile.entries(); entries.hasMoreElements();) {
+ JarEntry entry = entries.nextElement();
+ String name = entry.getName();
+ if (name.startsWith("configdefinitions/") && name.endsWith(".def")) {
+ copyConfigDefinition(jarFile, entry, jarArchiver);
+ }
+ }
+ return null;
+ });
+ }
+
+ private void copyConfigDefinition(JarFile jarFile, ZipEntry entry, JarArchiver jarArchiver) {
+ JarFiles.withInputStream(jarFile, entry, input -> {
+ String defPath = entry.getName().replace("/", File.separator);
+ File destinationFile = new File(project.getBuild().getOutputDirectory(), defPath);
+ destinationFile.getParentFile().mkdirs();
+
+ Files.withFileOutputStream(destinationFile, output -> {
+ output.getChannel().transferFrom(Channels.newChannel(input), 0, Long.MAX_VALUE);
+ return null;
+ });
+ jarArchiver.addFile(destinationFile, entry.getName());
+ return null;
+ });
+ }
+}
diff --git a/bundle-plugin/src/main/java/com/yahoo/container/plugin/mojo/AssembleContainerPluginMojo.java b/bundle-plugin/src/main/java/com/yahoo/container/plugin/mojo/AssembleContainerPluginMojo.java
index 13d73d58a97..bed7610e82f 100644
--- a/bundle-plugin/src/main/java/com/yahoo/container/plugin/mojo/AssembleContainerPluginMojo.java
+++ b/bundle-plugin/src/main/java/com/yahoo/container/plugin/mojo/AssembleContainerPluginMojo.java
@@ -1,53 +1,36 @@
// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.container.plugin.mojo;
-import com.yahoo.container.plugin.util.Files;
-import com.yahoo.container.plugin.util.JarFiles;
-import org.apache.maven.archiver.MavenArchiveConfiguration;
-import org.apache.maven.archiver.MavenArchiver;
-import org.apache.maven.execution.MavenSession;
import org.apache.maven.model.Build;
-import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugins.annotations.Component;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
import org.apache.maven.plugins.annotations.ResolutionScope;
-import org.apache.maven.project.MavenProject;
import org.apache.maven.project.MavenProjectHelper;
import org.codehaus.plexus.archiver.jar.JarArchiver;
import java.io.File;
-import java.nio.channels.Channels;
+import java.nio.file.Path;
+import java.nio.file.Paths;
import java.util.EnumMap;
-import java.util.Enumeration;
import java.util.Map;
-import java.util.jar.JarEntry;
import java.util.jar.JarFile;
-import java.util.zip.ZipEntry;
/**
* @author Tony Vaagenes
- * @author ollivir
+ * @author Olli Virtanen
+ * @author bjorncs
*/
@Mojo(name = "assemble-container-plugin", requiresDependencyResolution = ResolutionScope.COMPILE, threadSafe = true)
-public class AssembleContainerPluginMojo extends AbstractMojo {
+public class AssembleContainerPluginMojo extends AbstractAssembleBundleMojo {
private static enum Dependencies {
WITH, WITHOUT
}
- @Parameter(defaultValue = "${project}")
- private MavenProject project = null;
-
@Component
private MavenProjectHelper projectHelper;
- @Parameter(defaultValue = "${session}", readonly = true, required = true)
- private MavenSession session = null;
-
- @Parameter
- private MavenArchiveConfiguration archiveConfiguration = new MavenArchiveConfiguration();
-
@Parameter(alias = "UseCommonAssemblyIds", defaultValue = "false")
private boolean useCommonAssemblyIds = false;
@@ -74,19 +57,17 @@ public class AssembleContainerPluginMojo extends AbstractMojo {
jarFiles.put(dep, jarFileInBuildDirectory(build().getFinalName(), suffix));
});
- // force recreating the archive
- archiveConfiguration.setForced(true);
- archiveConfiguration.setManifestFile(new File(new File(build().getOutputDirectory()), JarFile.MANIFEST_NAME));
+ Path manifestFile = Paths.get(build().getOutputDirectory(), JarFile.MANIFEST_NAME);
JarArchiver jarWithoutDependencies = new JarArchiver();
- addClassesDirectory(jarWithoutDependencies);
- createArchive(jarFiles.get(Dependencies.WITHOUT), jarWithoutDependencies);
+ addDirectory(jarWithoutDependencies, Paths.get(build().getOutputDirectory()));
+ createArchive(jarWithoutDependencies, jarFiles.get(Dependencies.WITHOUT).toPath(), manifestFile);
project.getArtifact().setFile(jarFiles.get(Dependencies.WITHOUT));
JarArchiver jarWithDependencies = new JarArchiver();
- addClassesDirectory(jarWithDependencies);
- addDependencies(jarWithDependencies);
- createArchive(jarFiles.get(Dependencies.WITH), jarWithDependencies);
+ addDirectory(jarWithDependencies, Paths.get(build().getOutputDirectory()));
+ addArtifacts(jarWithDependencies, Artifacts.getArtifactsToInclude(project));
+ createArchive(jarWithDependencies, jarFiles.get(Dependencies.WITH).toPath(), manifestFile);
if (attachBundleArtifact) {
projectHelper.attachArtifact(project,
@@ -96,68 +77,6 @@ public class AssembleContainerPluginMojo extends AbstractMojo {
}
}
- private File jarFileInBuildDirectory(String name, String suffix) {
- return new File(build().getDirectory(), name + suffix);
- }
-
- private void addClassesDirectory(JarArchiver jarArchiver) {
- File classesDirectory = new File(build().getOutputDirectory());
- if (classesDirectory.isDirectory()) {
- jarArchiver.addDirectory(classesDirectory);
- }
- }
-
- private void createArchive(File jarFile, JarArchiver jarArchiver) throws MojoExecutionException {
- MavenArchiver mavenArchiver = new MavenArchiver();
- mavenArchiver.setArchiver(jarArchiver);
- mavenArchiver.setOutputFile(jarFile);
- try {
- mavenArchiver.createArchive(session, project, archiveConfiguration);
- } catch (Exception e) {
- throw new MojoExecutionException("Error creating archive " + jarFile.getName(), e);
- }
- }
-
- private void addDependencies(JarArchiver jarArchiver) {
- Artifacts.getArtifactsToInclude(project).forEach(artifact -> {
- if ("jar".equals(artifact.getType())) {
- jarArchiver.addFile(artifact.getFile(), "dependencies/" + artifact.getFile().getName());
- copyConfigDefinitions(artifact.getFile(), jarArchiver);
- } else {
- getLog().warn("Unkown artifact type " + artifact.getType());
- }
- });
- }
-
- private void copyConfigDefinitions(File file, JarArchiver jarArchiver) {
- JarFiles.withJarFile(file, jarFile -> {
- for (Enumeration<JarEntry> entries = jarFile.entries(); entries.hasMoreElements();) {
- JarEntry entry = entries.nextElement();
- String name = entry.getName();
- if (name.startsWith("configdefinitions/") && name.endsWith(".def")) {
- copyConfigDefinition(jarFile, entry, jarArchiver);
- }
- }
- return null;
- });
- }
-
- private void copyConfigDefinition(JarFile jarFile, ZipEntry entry, JarArchiver jarArchiver) {
- JarFiles.withInputStream(jarFile, entry, input -> {
- String defPath = entry.getName().replace("/", File.separator);
- File destinationFile = new File(build().getOutputDirectory(), defPath);
- destinationFile.getParentFile().mkdirs();
-
- Files.withFileOutputStream(destinationFile, output -> {
- output.getChannel().transferFrom(Channels.newChannel(input), 0, Long.MAX_VALUE);
- return null;
- });
- jarArchiver.addFile(destinationFile, entry.getName());
- return null;
- });
- }
-
- private Build build() {
- return project.getBuild();
- }
+ private File jarFileInBuildDirectory(String name, String suffix) { return new File(build().getDirectory(), name + suffix); }
+ private Build build() { return project.getBuild(); }
}
diff --git a/bundle-plugin/src/main/java/com/yahoo/container/plugin/mojo/AssembleTestBundleMojo.java b/bundle-plugin/src/main/java/com/yahoo/container/plugin/mojo/AssembleTestBundleMojo.java
new file mode 100644
index 00000000000..ab827275f53
--- /dev/null
+++ b/bundle-plugin/src/main/java/com/yahoo/container/plugin/mojo/AssembleTestBundleMojo.java
@@ -0,0 +1,38 @@
+// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.container.plugin.mojo;
+
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugins.annotations.Mojo;
+import org.apache.maven.plugins.annotations.Parameter;
+import org.apache.maven.plugins.annotations.ResolutionScope;
+import org.codehaus.plexus.archiver.jar.JarArchiver;
+
+import java.nio.file.Path;
+import java.nio.file.Paths;
+
+import static com.yahoo.container.plugin.mojo.TestBundleUtils.archiveFile;
+import static com.yahoo.container.plugin.mojo.TestBundleUtils.manifestFile;
+
+/**
+ * @author bjorncs
+ */
+@Mojo(name = "assemble-test-bundle", requiresDependencyResolution = ResolutionScope.TEST, threadSafe = true)
+public class AssembleTestBundleMojo extends AbstractAssembleBundleMojo {
+
+ @Parameter
+ private String testProvidedArtifacts;
+
+ @Override
+ public void execute() throws MojoExecutionException {
+ Artifacts.ArtifactSet artifacts = Artifacts.getArtifacts(project, true, testProvidedArtifacts);
+ JarArchiver archiver = new JarArchiver();
+ addDirectory(archiver, Paths.get(project.getBuild().getOutputDirectory()));
+ addDirectory(archiver, Paths.get(project.getBuild().getTestOutputDirectory()));
+ addArtifacts(archiver, artifacts.getJarArtifactsToInclude());
+ Path archiveFile = archiveFile(project);
+ createArchive(archiver, archiveFile, manifestFile(project));
+ project.getArtifact().setFile(archiveFile.toFile());
+ }
+
+
+}