| author | Igor Fedorenko | 2012-02-03 12:01:33 (EST) |
|---|---|---|
| committer | Igor Fedorenko | 2012-02-03 12:06:11 (EST) |
| commit | 1e1d160c5b9031e9ccc4f9ccacc2a74ddb3b6cc5 (patch) (side-by-side diff) | |
| tree | 763f6f29486d37037c46f05420bf365027533b38 | |
| parent | fe8f8be5355108dc6b117d49ea4bc04f0dcdf9d1 (diff) | |
| download | org.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>
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()); |

