SLING-11543 improve exception handling for invalid bundle files (#16)
add ITs for standalone goal usage of "install" and "install-file"
"file-install": change order of precedence for determining the bundle
the default bundle path is the target file generated by the current
project
diff --git a/src/it/install-file-test/invoker.properties b/src/it/install-file-test/invoker.properties
index 44fca57..4c74892 100644
--- a/src/it/install-file-test/invoker.properties
+++ b/src/it/install-file-test/invoker.properties
@@ -20,4 +20,6 @@
invoker.goals.3=install -Dsling.deploy.method=SlingPostServlet -Dsling.urlSuffix=/apps/sling-it
# invalid URL must lead to build failure
invoker.goals.4=install -Dsling.urlSuffix=/system/console2
-invoker.buildResult.4=failure
\ No newline at end of file
+invoker.buildResult.4=failure
+# call goal alone
+invoker.goals.5=sling:install-file -Dsling.urlSuffix=/system/console -Dsling.artifact=org.apache.sling:org.apache.sling.commons.messaging:1.0.2
diff --git a/src/it/install-file-test/pom.xml b/src/it/install-file-test/pom.xml
index 645157c..0ce29b1 100644
--- a/src/it/install-file-test/pom.xml
+++ b/src/it/install-file-test/pom.xml
@@ -65,8 +65,8 @@
</goals>
<phase>install</phase>
<configuration>
- <artifactId>org.apache.sling.commons.messaging</artifactId>
<groupId>org.apache.sling</groupId>
+ <artifactId>org.apache.sling.commons.messaging</artifactId>
<version>1.0.2</version>
</configuration>
</execution>
diff --git a/src/it/install-test/invoker.properties b/src/it/install-test/invoker.properties
index 3c0aaa5..2c9f0c7 100644
--- a/src/it/install-test/invoker.properties
+++ b/src/it/install-test/invoker.properties
@@ -20,4 +20,7 @@
invoker.goals.3=install -Dsling.deploy.method=SlingPostServlet -Dsling.urlSuffix=/apps/sling-it
# invalid URL must lead to build failure
invoker.goals.4=install -Dsling.urlSuffix=/system/console2
-invoker.buildResult.4=failure
\ No newline at end of file
+invoker.buildResult.4=failure
+# call goal alone
+invoker.goals.5=sling:install -Dsling.urlSuffix=/system/console
+invoker.buildResult.5=failure
\ No newline at end of file
diff --git a/src/main/java/org/apache/sling/maven/bundlesupport/AbstractBundleInstallMojo.java b/src/main/java/org/apache/sling/maven/bundlesupport/AbstractBundleInstallMojo.java
index 9354fc3..41a99f4 100644
--- a/src/main/java/org/apache/sling/maven/bundlesupport/AbstractBundleInstallMojo.java
+++ b/src/main/java/org/apache/sling/maven/bundlesupport/AbstractBundleInstallMojo.java
@@ -24,6 +24,7 @@
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.plugins.annotations.Parameter;
import org.apache.maven.project.MavenProject;
import org.apache.sling.maven.bundlesupport.deploy.BundleDeploymentMethod;
@@ -121,14 +122,12 @@
// only upload if packaging as an osgi-bundle
if (!bundleFile.exists()) {
- getLog().info(bundleFile + " does not exist, not uploading");
- return;
+ throw new MojoExecutionException("The given bundle file " + bundleFile + " does not exist!");
}
String bundleName = getBundleSymbolicName(bundleFile);
if (bundleName == null) {
- getLog().info(bundleFile + " is not an OSGi Bundle, not uploading");
- return;
+ throw new MojoExecutionException("The given file " + bundleFile + " is no OSGi bundle");
}
URI targetURL = getTargetURL();
diff --git a/src/main/java/org/apache/sling/maven/bundlesupport/BundleInstallFileMojo.java b/src/main/java/org/apache/sling/maven/bundlesupport/BundleInstallFileMojo.java
index 2b97cd7..4a81fc9 100644
--- a/src/main/java/org/apache/sling/maven/bundlesupport/BundleInstallFileMojo.java
+++ b/src/main/java/org/apache/sling/maven/bundlesupport/BundleInstallFileMojo.java
@@ -29,9 +29,9 @@
* Install an OSGi bundle from a given file path or Maven coordinates (resolved from the repository) to a running Sling instance.
* One of the following parameter sets must be set to determine the bundle to install:
* <ul>
- * <li>{@link #bundleFileName}</li>
* <li>{@link #groupId}, {@link #artifactId}, {@link #version}, {@link #packaging} and optionally {@link #classifier}</li>
* <li>{@link #artifact}</li>
+ * <li>{@link #bundleFileName}</li>
* </ul>
*
* To install a bundle which has been built from the current Maven project rather use goal <a href="install-mojo.html">install</a>.
@@ -42,24 +42,25 @@
/**
* The path of the bundle file to install.
+ * Is only effective if artifact is not determined via some other way (Maven coordinates).
*/
- @Parameter(property="sling.file")
+ @Parameter(property="sling.file", defaultValue = "${project.build.directory}/${project.build.finalName}.jar")
private File bundleFileName;
/**
- * The groupId of the artifact to install
+ * The groupId of the artifact to install. Takes precedence over {@link #artifact} and {@link #bundleFileName}.
*/
@Parameter(property="sling.groupId")
private String groupId;
/**
- * The artifactId of the artifact to install
+ * The artifactId of the artifact to install. Takes precedence over {@link #artifact} and {@link #bundleFileName}.
*/
@Parameter(property="sling.artifactId")
private String artifactId;
/**
- * The version of the artifact to install
+ * The version of the artifact to install. Takes precedence over {@link #artifact} and {@link #bundleFileName}.
*/
@Parameter(property="sling.version")
private String version;
@@ -78,23 +79,25 @@
/**
* A string of the form {@code groupId:artifactId:version[:packaging[:classifier]]}.
+ * Takes precedence over {@link #bundleFileName}.
*/
@Parameter(property="sling.artifact")
private String artifact;
@Override
protected File getBundleFileName() throws MojoExecutionException {
- File fileName = bundleFileName;
+ File fileName = resolveBundleFileFromArtifact();
if (fileName == null) {
- fileName = resolveBundleFileFromArtifact();
- if (fileName == null) {
- throw new MojoExecutionException("Must provide either sling.file or sling.artifact parameters");
- }
+ fileName = bundleFileName;
+ } else {
if (mountByFS) {
getLog().warn("The parameter 'mountByFS' is only supported with files outside the Maven repository and therefore ignored in this context!");
mountByFS = false;
}
}
+ if (fileName == null) {
+ throw new MojoExecutionException("Must provide either sling.file, sling.artifact or sling.groupId/sling.artifactId/sling.version parameters");
+ }
return fileName;
}
diff --git a/src/main/java/org/apache/sling/maven/bundlesupport/BundleInstallMojo.java b/src/main/java/org/apache/sling/maven/bundlesupport/BundleInstallMojo.java
index 256879e..9e3488c 100644
--- a/src/main/java/org/apache/sling/maven/bundlesupport/BundleInstallMojo.java
+++ b/src/main/java/org/apache/sling/maven/bundlesupport/BundleInstallMojo.java
@@ -52,7 +52,7 @@
}
@Override
- protected File getBundleFileName() {
+ protected File getBundleFileName() throws MojoExecutionException {
File file = project.getArtifact().getFile();
if (isBundleFile(file)) {
return file;
@@ -65,7 +65,7 @@
getLog().debug("No bundle found in secondary artifact " + file);
}
}
- return null;
+ throw new MojoExecutionException("No attached bundle found for this Maven project, for standalone usage use goal 'install-file' instead!");
}
private boolean isBundleFile(File file) {