summaryrefslogtreecommitdiffstats
authorIgor Fedorenko2012-02-03 12:01:33 (EST)
committer Igor Fedorenko2012-02-03 12:06:11 (EST)
commit1e1d160c5b9031e9ccc4f9ccacc2a74ddb3b6cc5 (patch) (side-by-side diff)
tree763f6f29486d37037c46f05420bf365027533b38
parentfe8f8be5355108dc6b117d49ea4bc04f0dcdf9d1 (diff)
downloadorg.eclipse.tycho-1e1d160c5b9031e9ccc4f9ccacc2a74ddb3b6cc5.zip
org.eclipse.tycho-1e1d160c5b9031e9ccc4f9ccacc2a74ddb3b6cc5.tar.gz
org.eclipse.tycho-1e1d160c5b9031e9ccc4f9ccacc2a74ddb3b6cc5.tar.bz2
350005 option to disable strict bin/src .includes validation
Introduced <strictBinIncludes> and <strictSrcIncludes> parameters to tycho-packaging-plugin and tycho-source-plugin respectively. If set to "false" missing bin/src .includes build.properties entries will be reported as warning messages but will not result in build failure. The intend is to provide a way to collection all missing .includes for entire reactor build, without having to iterate from one problem to the next until all are fixed. Signed-off-by: Igor Fedorenko <igor@ifedorenko.com>
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--tycho-packaging-plugin/src/main/java/org/eclipse/tycho/packaging/AbstractTychoPackagingMojo.java21
-rw-r--r--tycho-packaging-plugin/src/main/java/org/eclipse/tycho/packaging/IncludeValidationHelper.java34
-rw-r--r--tycho-packaging-plugin/src/main/java/org/eclipse/tycho/packaging/PackageFeatureMojo.java4
-rw-r--r--tycho-packaging-plugin/src/main/java/org/eclipse/tycho/packaging/PackagePluginMojo.java4
-rw-r--r--tycho-packaging-plugin/src/test/java/org/eclipse/tycho/packaging/IncludeValidationHelperTest.java61
-rw-r--r--tycho-source-plugin/src/main/java/org/eclipse/tycho/source/OsgiSourceMojo.java19
6 files changed, 120 insertions, 23 deletions
diff --git a/tycho-packaging-plugin/src/main/java/org/eclipse/tycho/packaging/AbstractTychoPackagingMojo.java b/tycho-packaging-plugin/src/main/java/org/eclipse/tycho/packaging/AbstractTychoPackagingMojo.java
index 8ae8e2c..6b5ed6a 100644
--- a/tycho-packaging-plugin/src/main/java/org/eclipse/tycho/packaging/AbstractTychoPackagingMojo.java
+++ b/tycho-packaging-plugin/src/main/java/org/eclipse/tycho/packaging/AbstractTychoPackagingMojo.java
@@ -19,6 +19,7 @@ import java.util.Set;
import org.apache.maven.execution.MavenSession;
import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.project.MavenProject;
import org.apache.maven.project.MavenProjectHelper;
import org.codehaus.plexus.PlexusContainer;
@@ -29,6 +30,7 @@ import org.eclipse.tycho.ReactorProject;
import org.eclipse.tycho.artifacts.DependencyArtifacts;
import org.eclipse.tycho.core.ArtifactDependencyWalker;
import org.eclipse.tycho.core.TychoProject;
+import org.eclipse.tycho.core.facade.BuildProperties;
import org.eclipse.tycho.core.osgitools.DefaultReactorProject;
/**
@@ -57,6 +59,15 @@ public abstract class AbstractTychoPackagingMojo extends AbstractMojo {
*/
protected String qualifier;
+ /**
+ * If set to <code>true</code> (the default), missing build.properties bin.includes will cause
+ * build failure. If set to <code>false</code>, missing build.properties bin.includes will be
+ * reported as warnings but the build will not fail.
+ *
+ * @parameter default-value="true"
+ */
+ protected boolean strictBinIncludes;
+
/** @component */
protected PlexusContainer plexus;
@@ -68,6 +79,11 @@ public abstract class AbstractTychoPackagingMojo extends AbstractMojo {
*/
private Map<String, TychoProject> projectTypes;
+ /**
+ * @component
+ */
+ private IncludeValidationHelper includeValidationHelper;
+
protected FileSet getFileSet(File basedir, List<String> includes, List<String> excludes) {
DefaultFileSet fileSet = new DefaultFileSet();
fileSet.setDirectory(basedir);
@@ -112,4 +128,9 @@ public abstract class AbstractTychoPackagingMojo extends AbstractMojo {
reactorProject.setExpandedVersion(originalVersion, qualifier);
}
+ protected void checkBinIncludesExist(BuildProperties buildProperties, String... ignoredIncludes)
+ throws MojoExecutionException {
+ includeValidationHelper.checkBinIncludesExist(project, buildProperties, strictBinIncludes, ignoredIncludes);
+ }
+
}
diff --git a/tycho-packaging-plugin/src/main/java/org/eclipse/tycho/packaging/IncludeValidationHelper.java b/tycho-packaging-plugin/src/main/java/org/eclipse/tycho/packaging/IncludeValidationHelper.java
index 180440c..2bcb20b 100644
--- a/tycho-packaging-plugin/src/main/java/org/eclipse/tycho/packaging/IncludeValidationHelper.java
+++ b/tycho-packaging-plugin/src/main/java/org/eclipse/tycho/packaging/IncludeValidationHelper.java
@@ -18,26 +18,37 @@ import java.util.List;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.project.MavenProject;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+import org.codehaus.plexus.logging.Logger;
import org.codehaus.plexus.util.DirectoryScanner;
import org.eclipse.tycho.core.facade.BuildProperties;
+@Component(role = IncludeValidationHelper.class)
public class IncludeValidationHelper {
- private IncludeValidationHelper() {
+ @Requirement
+ private Logger log;
+
+ public IncludeValidationHelper() {
+ }
+
+ public IncludeValidationHelper(Logger log) {
+ this.log = log;
}
- public static void checkBinIncludesExist(MavenProject project, BuildProperties buildProperties,
+ public void checkBinIncludesExist(MavenProject project, BuildProperties buildProperties, boolean strict,
String... ignoredIncludes) throws MojoExecutionException {
- checkIncludesExist("bin.includes", buildProperties.getBinIncludes(), project, ignoredIncludes);
+ checkIncludesExist("bin.includes", buildProperties.getBinIncludes(), project, strict, ignoredIncludes);
}
- public static void checkSourceIncludesExist(MavenProject project, BuildProperties buildProperties)
+ public void checkSourceIncludesExist(MavenProject project, BuildProperties buildProperties, boolean strict)
throws MojoExecutionException {
- checkIncludesExist("src.includes", buildProperties.getSourceIncludes(), project);
+ checkIncludesExist("src.includes", buildProperties.getSourceIncludes(), project, strict);
}
- private static void checkIncludesExist(String buildPropertiesKey, List<String> includePatterns,
- MavenProject project, String... ignoredIncludes) throws MojoExecutionException {
+ private void checkIncludesExist(String buildPropertiesKey, List<String> includePatterns, MavenProject project,
+ boolean strict, String... ignoredIncludes) throws MojoExecutionException {
File baseDir = project.getBasedir();
List<String> nonMatchingIncludes = new ArrayList<String>();
List<String> ignoreList = Arrays.asList(ignoredIncludes);
@@ -58,8 +69,13 @@ public class IncludeValidationHelper {
}
}
if (nonMatchingIncludes.size() > 0) {
- throw new MojoExecutionException(new File(baseDir, "build.properties").getAbsolutePath() + ": "
- + buildPropertiesKey + " value(s) " + nonMatchingIncludes + " do not match any files.");
+ String message = new File(baseDir, "build.properties").getAbsolutePath() + ": " + buildPropertiesKey
+ + " value(s) " + nonMatchingIncludes + " do not match any files.";
+ if (strict) {
+ throw new MojoExecutionException(message);
+ } else {
+ log.warn(message);
+ }
}
}
diff --git a/tycho-packaging-plugin/src/main/java/org/eclipse/tycho/packaging/PackageFeatureMojo.java b/tycho-packaging-plugin/src/main/java/org/eclipse/tycho/packaging/PackageFeatureMojo.java
index 1fcd7f9..14019c1 100644
--- a/tycho-packaging-plugin/src/main/java/org/eclipse/tycho/packaging/PackageFeatureMojo.java
+++ b/tycho-packaging-plugin/src/main/java/org/eclipse/tycho/packaging/PackageFeatureMojo.java
@@ -10,8 +10,6 @@
*******************************************************************************/
package org.eclipse.tycho.packaging;
-import static org.eclipse.tycho.packaging.IncludeValidationHelper.checkBinIncludesExist;
-
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
@@ -126,7 +124,7 @@ public class PackageFeatureMojo extends AbstractTychoPackagingMojo {
}
BuildProperties buildProperties = buildPropertiesParser.parse(project.getBasedir());
- checkBinIncludesExist(project, buildProperties);
+ checkBinIncludesExist(buildProperties);
File featureProperties = getFeatureProperties(licenseFeature, buildProperties);
diff --git a/tycho-packaging-plugin/src/main/java/org/eclipse/tycho/packaging/PackagePluginMojo.java b/tycho-packaging-plugin/src/main/java/org/eclipse/tycho/packaging/PackagePluginMojo.java
index 4562e1a..62bc3a1 100644
--- a/tycho-packaging-plugin/src/main/java/org/eclipse/tycho/packaging/PackagePluginMojo.java
+++ b/tycho-packaging-plugin/src/main/java/org/eclipse/tycho/packaging/PackagePluginMojo.java
@@ -10,8 +10,6 @@
*******************************************************************************/
package org.eclipse.tycho.packaging;
-import static org.eclipse.tycho.packaging.IncludeValidationHelper.checkBinIncludesExist;
-
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
@@ -135,7 +133,7 @@ public class PackagePluginMojo extends AbstractTychoPackagingMojo {
if (binIncludesList.size() > 0) {
String dotOutputJarName = dotOutputJar != null ? dotOutputJar.getName() : ".";
- checkBinIncludesExist(project, buildProperties, dotOutputJarName);
+ checkBinIncludesExist(buildProperties, dotOutputJarName);
archiver.getArchiver().addFileSet(getFileSet(project.getBasedir(), binIncludesList, binExcludesList));
}
diff --git a/tycho-packaging-plugin/src/test/java/org/eclipse/tycho/packaging/IncludeValidationHelperTest.java b/tycho-packaging-plugin/src/test/java/org/eclipse/tycho/packaging/IncludeValidationHelperTest.java
index 6eba922..033b23b 100644
--- a/tycho-packaging-plugin/src/test/java/org/eclipse/tycho/packaging/IncludeValidationHelperTest.java
+++ b/tycho-packaging-plugin/src/test/java/org/eclipse/tycho/packaging/IncludeValidationHelperTest.java
@@ -16,33 +16,42 @@ import static org.junit.Assert.fail;
import java.io.File;
import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
import java.util.Properties;
+import junit.framework.Assert;
+
import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.testing.SilentLog;
import org.apache.maven.project.MavenProject;
+import org.codehaus.plexus.logging.AbstractLogger;
+import org.codehaus.plexus.logging.Logger;
import org.eclipse.tycho.core.facade.BuildPropertiesImpl;
import org.eclipse.tycho.testing.TestUtil;
import org.junit.Test;
public class IncludeValidationHelperTest {
+ private IncludeValidationHelper subject = new IncludeValidationHelper(new SilentLog());
+
@Test
public void testCheckSourceIncludesExistAntPatterns() throws Exception {
BuildPropertiesImpl buildProperties = createBuildProperties("src.includes", "foo.txt, bar*,**/*.me");
- IncludeValidationHelper.checkSourceIncludesExist(createMockProject(), buildProperties);
+ subject.checkSourceIncludesExist(createMockProject(), buildProperties, true);
}
@Test
public void testCheckBinIncludesExistAntPatterns() throws Exception {
BuildPropertiesImpl buildProperties = createBuildProperties("bin.includes", "foo.txt, bar*,**/*.me");
- IncludeValidationHelper.checkBinIncludesExist(createMockProject(), buildProperties);
+ subject.checkBinIncludesExist(createMockProject(), buildProperties, true);
}
@Test
public void testCheckBinIncludesDontExist() throws Exception {
BuildPropertiesImpl buildProperties = createBuildProperties("bin.includes", "foo2.txt, bar2*,**/*.me");
try {
- IncludeValidationHelper.checkBinIncludesExist(createMockProject(), buildProperties);
+ subject.checkBinIncludesExist(createMockProject(), buildProperties, true);
fail();
} catch (MojoExecutionException e) {
assertStringContains("bin.includes value(s) [foo2.txt, bar2*] do not match any files.", e.getMessage());
@@ -53,7 +62,7 @@ public class IncludeValidationHelperTest {
public void testCheckSourceIncludesDontExist() throws Exception {
BuildPropertiesImpl buildProperties = createBuildProperties("src.includes", "foo3, bar3*,**/*.me");
try {
- IncludeValidationHelper.checkSourceIncludesExist(createMockProject(), buildProperties);
+ subject.checkSourceIncludesExist(createMockProject(), buildProperties, true);
fail();
} catch (MojoExecutionException e) {
assertStringContains("src.includes value(s) [foo3, bar3*] do not match any files.", e.getMessage());
@@ -64,7 +73,49 @@ public class IncludeValidationHelperTest {
public void testCheckBinIncludesExistWithIgnoredPatterns() throws Exception {
BuildPropertiesImpl buildProperties = createBuildProperties("bin.includes",
"foo.txt, bar*,**/*.me,TO_BE_IGNORED");
- IncludeValidationHelper.checkBinIncludesExist(createMockProject(), buildProperties, "TO_BE_IGNORED");
+ subject.checkBinIncludesExist(createMockProject(), buildProperties, true, "TO_BE_IGNORED");
+ }
+
+ @Test
+ public void testWarning() throws Exception {
+ final List<String> warnings = new ArrayList<String>();
+
+ Logger log = new AbstractLogger(Logger.LEVEL_DEBUG, null) {
+
+ public void warn(String message, Throwable throwable) {
+ warnings.add(message);
+ }
+
+ public void info(String message, Throwable throwable) {
+ Assert.fail();
+ }
+
+ public Logger getChildLogger(String name) {
+ return null;
+ }
+
+ public void fatalError(String message, Throwable throwable) {
+ Assert.fail();
+ }
+
+ public void error(String message, Throwable throwable) {
+ Assert.fail();
+ }
+
+ public void debug(String message, Throwable throwable) {
+ Assert.fail();
+ }
+ };
+
+ IncludeValidationHelper subject = new IncludeValidationHelper(log);
+
+ BuildPropertiesImpl buildProperties = createBuildProperties("src.includes", "foo3, bar3*,**/*.me");
+ MavenProject project = createMockProject();
+ subject.checkSourceIncludesExist(project, buildProperties, false);
+
+ Assert.assertEquals(1, warnings.size());
+ Assert.assertEquals(new File(project.getBasedir(), "build.properties").getAbsolutePath()
+ + ": src.includes value(s) [foo3, bar3*] do not match any files.", warnings.get(0));
}
private void assertStringContains(String expected, String actual) {
diff --git a/tycho-source-plugin/src/main/java/org/eclipse/tycho/source/OsgiSourceMojo.java b/tycho-source-plugin/src/main/java/org/eclipse/tycho/source/OsgiSourceMojo.java
index 63433b2..0c1cbd0 100644
--- a/tycho-source-plugin/src/main/java/org/eclipse/tycho/source/OsgiSourceMojo.java
+++ b/tycho-source-plugin/src/main/java/org/eclipse/tycho/source/OsgiSourceMojo.java
@@ -10,8 +10,6 @@
*******************************************************************************/
package org.eclipse.tycho.source;
-import static org.eclipse.tycho.packaging.IncludeValidationHelper.checkSourceIncludesExist;
-
import java.io.File;
import java.util.ArrayList;
import java.util.Collections;
@@ -31,6 +29,7 @@ import org.eclipse.tycho.core.TychoProject;
import org.eclipse.tycho.core.facade.BuildProperties;
import org.eclipse.tycho.core.facade.BuildPropertiesParser;
import org.eclipse.tycho.core.osgitools.DefaultReactorProject;
+import org.eclipse.tycho.packaging.IncludeValidationHelper;
import org.osgi.framework.Version;
/**
@@ -92,6 +91,15 @@ public class OsgiSourceMojo extends AbstractSourceJarMojo {
protected boolean requireSourceRoots;
/**
+ * If set to <code>true</code> (the default), missing build.properties src.includes will cause
+ * build failure. If set to <code>false</code>, missing build.properties src.includes will be
+ * reported as warnings but the build will not fail.
+ *
+ * @parameter default-value="true"
+ */
+ protected boolean strictSrcIncludes;
+
+ /**
* @component role="org.eclipse.tycho.core.TychoProject"
*/
private Map<String, TychoProject> projectTypes;
@@ -101,6 +109,11 @@ public class OsgiSourceMojo extends AbstractSourceJarMojo {
*/
private BuildPropertiesParser buildPropertiesParser;
+ /**
+ * @component
+ */
+ private IncludeValidationHelper includeValidationHelper;
+
/** {@inheritDoc} */
protected List<String> getSources(MavenProject p) throws MojoExecutionException {
return getSources(project, requireSourceRoots, buildPropertiesParser);
@@ -131,7 +144,7 @@ public class OsgiSourceMojo extends AbstractSourceJarMojo {
if (srcIncludesList.isEmpty()) {
return Collections.emptyList();
}
- checkSourceIncludesExist(p, buildProperties);
+ includeValidationHelper.checkSourceIncludesExist(p, buildProperties, strictSrcIncludes);
Resource resource = new Resource();
resource.setDirectory(project.getBasedir().getAbsolutePath());
resource.setExcludes(buildProperties.getSourceExcludes());