20 Commits
Author SHA1 Message Date
brian.long eff0b43059 Merge branch 'develop' into stable 2021-06-02 14:15:32 -04:00
brian.long 05adb5f119 excluding this project itself 2021-06-02 14:15:10 -04:00
brian.long 85c2fa9d96 v1.0.5 pom 2021-06-02 08:34:28 -04:00
brian.long ad2f0af0a3 Merge branch 'develop' into stable 2021-06-02 08:31:04 -04:00
brian.long b0baa443ca added parent search 2021-06-02 08:30:23 -04:00
brian.long ceef88aa8d added module cache to exclude dependencies of modules 2021-06-02 08:19:46 -04:00
brian.long 7038122a2c v1.0.4 pom 2021-05-19 16:15:01 -04:00
brian.long d0cb229d81 Merge branch 'develop' into stable 2021-05-19 16:14:26 -04:00
brian.long dec44cf623 fixed zip streaming 2021-05-19 16:14:12 -04:00
brian.long e3626bdbf8 v1.0.3 pom 2021-05-19 11:16:01 -04:00
brian.long 85dba196a0 Merge branch 'develop' into stable 2021-05-19 11:15:19 -04:00
brian.long 8ede035b2a using stream instead of reader 2021-05-19 11:15:08 -04:00
brian.long 9b080710a1 v1.0.2 pom 2021-05-17 17:52:34 -04:00
brian.long 0a69deb73a Merge branch 'develop' into stable 2021-05-17 17:52:04 -04:00
brian.long 80e03c558b fixed artifact resolution 2021-05-17 17:51:29 -04:00
brian.long e7f2c1da67 added pom metadata; changed repo hostnane 2021-02-26 20:31:25 -05:00
brian.long 00abdc4340 v1.0.1 pom 2021-01-26 10:37:17 -05:00
brian.long 0a3bf69eff Merge branch 'develop' into stable 2021-01-26 10:30:26 -05:00
brian.long 8e66eaefdf filtering modules properly per Maven API 2021-01-26 10:28:51 -05:00
brian.long aadc05a270 deploy fix 2021-01-25 10:32:23 -05:00
5 changed files with 193 additions and 49 deletions
+3
View File
@@ -7,3 +7,6 @@ pom.xml.versionsBackup
.project
.classpath
# Visual Studio Code
.factorypath
+11 -3
View File
@@ -8,17 +8,25 @@
<groupId>com.inteligr8.alfresco</groupId>
<artifactId>amp-plugin</artifactId>
<version>1.0.0</version>
<version>1.0.5</version>
<packaging>maven-plugin</packaging>
<name>A Maven plugin to generate AMP files</name>
<description>Generate Alfresco Module Packages (AMP) files in a way simialr to WAR files</description>
<scm>
<url>https://bitbucket.org/inteligr8/maven-amp-plugin</url>
</scm>
<organization>
<name>Inteligr8</name>
<url>https://www.inteligr8.com</url>
</organization>
<developers>
<developer>
<id>brian.long</id>
<name>Brian Long</name>
<email>brian@inteligr8.com</email>
<url>https://twitter.com/brianmlong</url>
</developer>
</developers>
@@ -83,7 +91,7 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-plugin-plugin</artifactId>
<version>3.6.0</version>
<version>3.6.1</version>
<configuration>
<goalPrefix>amp</goalPrefix>
</configuration>
@@ -109,7 +117,7 @@
<repository>
<id>inteligr8-releases</id>
<name>Inteligr8 Releases</name>
<url>http://repos.yateslong.us/nexus/repository/inteligr8-public</url>
<url>http://repos.inteligr8.com/nexus/repository/inteligr8-public</url>
</repository>
</distributionManagement>
@@ -0,0 +1,134 @@
package com.inteligr8.alfresco.amp;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.nio.charset.Charset;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import org.apache.maven.plugin.logging.Log;
import org.eclipse.aether.artifact.Artifact;
import org.eclipse.aether.graph.DependencyFilter;
import org.eclipse.aether.graph.DependencyNode;
import org.eclipse.aether.resolution.ArtifactRequest;
import org.eclipse.aether.resolution.ArtifactResolutionException;
import org.eclipse.aether.resolution.ArtifactResult;
public class AmpDependencyFilter implements DependencyFilter {
private final Pattern modulePropertiesPattern = Pattern.compile("^alfresco/module/[^/]+/module\\.properties$");
private final int streamBufferSize = 16 * 1024;
private final Log log;
private final Charset charset;
private final ArtifactResolutionCallback callback;
private final String projectModuleId;
private Set<String> moduleIds = new HashSet<String>();
public AmpDependencyFilter(Log log, String charsetName, ArtifactResolutionCallback callback) {
this.log = log;
this.charset = Charset.forName(charsetName);
this.callback = callback;
this.projectModuleId = this.getModuleId(this.callback.getProject().getArtifact());
}
private String getModuleId(org.apache.maven.artifact.Artifact artifact) {
return artifact.getGroupId() + "." + artifact.getArtifactId();
}
private String getModuleId(Artifact artifact) {
return artifact.getGroupId() + "." + artifact.getArtifactId();
}
@Override
public boolean accept(DependencyNode node, List<DependencyNode> parents) {
Artifact artifact = node.getArtifact();
if (this.log.isDebugEnabled())
this.log.debug("Checking dependency: " + artifact.getArtifactId());
String moduleId = this.getModuleId(artifact);
if (this.projectModuleId.equals(moduleId)) {
// always include project itself, even if it is a module
return true;
}
if (this.moduleIds.contains(moduleId)) {
if (this.log.isDebugEnabled())
this.log.debug("Not packaging library; detected as Alfresco Module: " + node.getArtifact().getArtifactId());
return false;
} else if (parents != null) {
for (DependencyNode parent : parents) {
String parentModuleId = this.getModuleId(parent.getArtifact());
if (this.moduleIds.contains(parentModuleId)) {
this.moduleIds.add(moduleId);
if (this.log.isDebugEnabled())
this.log.debug("Not packaging library; detected as dependency to other Alfresco Module: " + node.getArtifact().getArtifactId());
return false;
}
}
}
File file = artifact.getFile();
try {
if (file == null) {
if (this.log.isDebugEnabled())
this.log.debug("Resolving dependency: " + artifact.getArtifactId());
ArtifactResult result = this.callback.resolveArtifact(new ArtifactRequest(node));
if (result.isMissing() || !result.isResolved())
throw new ArtifactResolutionException(Arrays.asList(result));
artifact = result.getArtifact();
file = artifact.getFile();
}
if (this.log.isDebugEnabled())
this.log.debug("Checking dependency file: " + file);
if (this.isAlfrescoModule(file)) {
this.moduleIds.add(moduleId);
if (this.log.isInfoEnabled())
this.log.info("Not packaging library; detected as Alfresco Module: " + node.getArtifact().getArtifactId());
return false;
}
return true;
} catch (ArtifactResolutionException are) {
this.log.warn("An artifact could not be resolved; assuming it is not an Alfresco module and continuing");
return true;
} catch (IOException ie) {
this.log.warn("An I/O issue occurred while inspecting a JAR to see if it is an Alfresco module; assuming it isn't and continuing");
return true;
}
}
private boolean isAlfrescoModule(File file) throws IOException {
FileInputStream fistream = new FileInputStream(file);
BufferedInputStream bistream = new BufferedInputStream(fistream, this.streamBufferSize);
ZipInputStream zstream = new ZipInputStream(bistream, this.charset);
try {
ZipEntry zentry = zstream.getNextEntry();
while (zentry != null) {
try {
Matcher modPropsMatcher = this.modulePropertiesPattern.matcher(zentry.getName());
if (modPropsMatcher.find())
return true;
} finally {
zstream.closeEntry();
}
zentry = zstream.getNextEntry();
}
} finally {
zstream.close();
}
return false;
}
}
@@ -5,7 +5,6 @@ import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.nio.charset.Charset;
import java.util.ArrayList;
@@ -13,10 +12,7 @@ import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;
import org.apache.commons.lang3.StringUtils;
@@ -41,6 +37,10 @@ import org.codehaus.plexus.component.annotations.Requirement;
import org.codehaus.plexus.util.FileUtils;
import org.codehaus.plexus.util.IOUtil;
import org.eclipse.aether.graph.Dependency;
import org.eclipse.aether.impl.ArtifactResolver;
import org.eclipse.aether.resolution.ArtifactRequest;
import org.eclipse.aether.resolution.ArtifactResolutionException;
import org.eclipse.aether.resolution.ArtifactResult;
import org.eclipse.aether.util.filter.DependencyFilterUtils;
import org.eclipse.aether.util.filter.ExclusionsDependencyFilter;
import org.eclipse.aether.util.filter.ScopeDependencyFilter;
@@ -48,9 +48,8 @@ import org.eclipse.aether.util.filter.ScopeDependencyFilter;
@Mojo( name = "amp", defaultPhase = LifecyclePhase.PACKAGE, threadSafe = true,
requiresDependencyResolution = ResolutionScope.COMPILE_PLUS_RUNTIME )
@Component( role = org.apache.maven.plugin.Mojo.class )
public class AmpMojo extends AbstractMojo {
public class AmpMojo extends AbstractMojo implements ArtifactResolutionCallback {
private final Pattern modulePropertiesPattern = Pattern.compile("^alfresco/module/[^/]+/module\\.properties$");
private final int streamBufferSize = 16384;
@Parameter( defaultValue = "${project}", readonly = true )
@@ -62,6 +61,9 @@ public class AmpMojo extends AbstractMojo {
@Requirement
private ProjectDependenciesResolver resolver;
@Requirement
private ArtifactResolver artifactResolver;
@Parameter( property = "outputFile", required = true, defaultValue = "${project.build.directory}/${project.artifactId}-${project.version}.amp" )
protected String outputAmpFile;
@@ -89,9 +91,14 @@ public class AmpMojo extends AbstractMojo {
@Parameter( property = "skip", required = true, defaultValue = "false" )
protected boolean skip;
@Override
public MavenProject getProject() {
return this.project;
}
public void execute() throws MojoExecutionException {
if (this.skip) {
this.getLog().debug("Skipped AMP packaging");
this.getLog().debug("Skipped AMP package");
return;
}
this.getLog().debug("Executing AMP packaging");
@@ -202,13 +209,8 @@ public class AmpMojo extends AbstractMojo {
} else {
for (Dependency dependency : deps) {
File file = dependency.getArtifact().getFile();
if (this.isAlfrescoModule(file)) {
if (this.getLog().isInfoEnabled())
this.getLog().info("Not packaging JAR; detected as Alfresco JAR Module: " + dependency.getArtifact().getArtifactId());
} else {
this.zipFile(zstream, file, "lib");
libcount++;
}
this.zipFile(zstream, file, "lib");
libcount++;
}
if (this.getLog().isInfoEnabled())
@@ -234,9 +236,10 @@ public class AmpMojo extends AbstractMojo {
ScopeDependencyFilter scopeFilter = new ScopeDependencyFilter(Arrays.asList(includeScopes), new ArrayList<String>(0));
ExclusionsDependencyFilter exclusionFilter = new ExclusionsDependencyFilter(this.getExclusions());
AmpDependencyFilter ampFilter = new AmpDependencyFilter(this.getLog(), this.charsetName, this);
DependencyResolutionRequest request = new DefaultDependencyResolutionRequest(this.project, this.session.getRepositorySession());
request.setResolutionFilter(DependencyFilterUtils.andFilter(scopeFilter, exclusionFilter));
request.setResolutionFilter(DependencyFilterUtils.andFilter(scopeFilter, exclusionFilter, ampFilter));
DependencyResolutionResult result = this.resolver.resolve(request);
return result.getResolvedDependencies();
@@ -275,11 +278,12 @@ public class AmpMojo extends AbstractMojo {
zstream.putNextEntry(new ZipEntry(filename));
File file = new File(directory, filename);
FileReader freader = new FileReader(file);
FileInputStream fistream = new FileInputStream(file);
BufferedInputStream bistream = new BufferedInputStream(fistream, this.streamBufferSize);
try {
IOUtil.copy(freader, zstream);
IOUtil.copy(bistream, zstream);
} finally {
freader.close();
bistream.close();
}
zstream.closeEntry();
@@ -301,39 +305,20 @@ public class AmpMojo extends AbstractMojo {
zstream.putNextEntry(new ZipEntry(targetPath + file.getName()));
FileReader freader = new FileReader(file);
FileInputStream fistream = new FileInputStream(file);
BufferedInputStream bistream = new BufferedInputStream(fistream, this.streamBufferSize);
try {
IOUtil.copy(freader, zstream);
IOUtil.copy(bistream, zstream);
} finally {
freader.close();
bistream.close();
}
zstream.closeEntry();
}
private boolean isAlfrescoModule(File file) throws IOException {
FileInputStream fistream = new FileInputStream(file);
BufferedInputStream bistream = new BufferedInputStream(fistream, this.streamBufferSize);
ZipInputStream zstream = new ZipInputStream(bistream, Charset.forName(this.charsetName));
try {
ZipEntry zentry = zstream.getNextEntry();
while (zentry != null) {
this.getLog().debug("dep entry: " + zentry.getName());
try {
Matcher modPropsMatcher = this.modulePropertiesPattern.matcher(zentry.getName());
if (modPropsMatcher.find())
return true;
} finally {
zstream.closeEntry();
}
zentry = zstream.getNextEntry();
}
} finally {
zstream.close();
}
return false;
@Override
public ArtifactResult resolveArtifact(ArtifactRequest artifactRequest) throws ArtifactResolutionException {
return this.artifactResolver.resolveArtifact(this.session.getRepositorySession(), artifactRequest);
}
}
@@ -0,0 +1,14 @@
package com.inteligr8.alfresco.amp;
import org.apache.maven.project.MavenProject;
import org.eclipse.aether.resolution.ArtifactRequest;
import org.eclipse.aether.resolution.ArtifactResolutionException;
import org.eclipse.aether.resolution.ArtifactResult;
public interface ArtifactResolutionCallback {
MavenProject getProject();
ArtifactResult resolveArtifact(ArtifactRequest artifactRequest) throws ArtifactResolutionException;
}