More m2e improvements for camel-package-maven-plugin - Make generated folder visible in Eclipse - Uses build context output stream for better integration - Avoid generating json files when input is unchanged
Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/fa88e170 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/fa88e170 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/fa88e170 Branch: refs/heads/master Commit: fa88e17088d521e50712ccf3a837ee3c61821d12 Parents: ef99689 Author: Victor Noël <victor.n...@linagora.com> Authored: Fri May 22 15:36:51 2015 +0200 Committer: Claus Ibsen <davscl...@apache.org> Committed: Tue May 26 11:35:02 2015 +0200 ---------------------------------------------------------------------- .../maven/packaging/PackageComponentMojo.java | 26 ++++++----- .../maven/packaging/PackageDataFormatMojo.java | 48 ++++++++++++-------- .../maven/packaging/PackageLanguageMojo.java | 40 ++++++++++------ 3 files changed, 70 insertions(+), 44 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/fa88e170/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PackageComponentMojo.java ---------------------------------------------------------------------- diff --git a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PackageComponentMojo.java b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PackageComponentMojo.java index 92ed09d..b3d8207 100644 --- a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PackageComponentMojo.java +++ b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PackageComponentMojo.java @@ -17,10 +17,9 @@ package org.apache.camel.maven.packaging; import java.io.File; -import java.io.FileWriter; import java.io.IOException; -import java.util.ArrayList; -import java.util.List; +import java.io.OutputStream; +import java.util.Collections; import java.util.Properties; import org.apache.maven.model.Resource; @@ -84,13 +83,19 @@ public class PackageComponentMojo extends AbstractMojo { } public static void prepareComponent(Log log, MavenProject project, MavenProjectHelper projectHelper, File componentOutDir, BuildContext buildContext) throws MojoExecutionException { - + + File camelMetaDir = new File(componentOutDir, "META-INF/services/org/apache/camel/"); + + // first we need to setup the output directory because the next check + // can stop the build before the end and eclipse always needs to know about that directory + if (projectHelper != null) { + projectHelper.addResource(project, componentOutDir.getPath(), Collections.singletonList("**/component.properties"), Collections.emptyList()); + } + if (!PackageHelper.haveResourcesChanged(log, project, buildContext, "META-INF/services/org/apache/camel/component")) { return; } - File camelMetaDir = new File(componentOutDir, "META-INF/services/org/apache/camel/"); - StringBuilder buffer = new StringBuilder(); int count = 0; for (Resource r : project.getBuild().getResources()) { @@ -136,14 +141,13 @@ public class PackageComponentMojo extends AbstractMojo { camelMetaDir.mkdirs(); File outFile = new File(camelMetaDir, "component.properties"); try { - properties.store(new FileWriter(outFile), "Generated by camel-package-maven-plugin"); - buildContext.refresh(outFile); + try(OutputStream os = buildContext.newFileOutputStream(outFile)) { + properties.store(os, "Generated by camel-package-maven-plugin"); + } + log.info("Generated " + outFile + " containing " + count + " Camel " + (count > 1 ? "components: " : "component: ") + names); if (projectHelper != null) { - List<String> includes = new ArrayList<String>(); - includes.add("**/component.properties"); - projectHelper.addResource(project, componentOutDir.getPath(), includes, new ArrayList<String>()); projectHelper.attachArtifact(project, "properties", "camelComponent", outFile); } } catch (IOException e) { http://git-wip-us.apache.org/repos/asf/camel/blob/fa88e170/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PackageDataFormatMojo.java ---------------------------------------------------------------------- diff --git a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PackageDataFormatMojo.java b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PackageDataFormatMojo.java index 9ddfe28..b398787 100644 --- a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PackageDataFormatMojo.java +++ b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PackageDataFormatMojo.java @@ -16,15 +16,18 @@ */ package org.apache.camel.maven.packaging; +import static org.apache.camel.maven.packaging.PackageHelper.after; +import static org.apache.camel.maven.packaging.PackageHelper.loadText; +import static org.apache.camel.maven.packaging.PackageHelper.parseAsMap; + import java.io.File; import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; +import java.io.OutputStream; import java.net.URL; import java.net.URLClassLoader; -import java.util.ArrayList; +import java.util.Collections; import java.util.HashMap; import java.util.Iterator; import java.util.List; @@ -41,10 +44,6 @@ import org.apache.maven.project.MavenProject; import org.apache.maven.project.MavenProjectHelper; import org.sonatype.plexus.build.incremental.BuildContext; -import static org.apache.camel.maven.packaging.PackageHelper.after; -import static org.apache.camel.maven.packaging.PackageHelper.loadText; -import static org.apache.camel.maven.packaging.PackageHelper.parseAsMap; - /** * Analyses the Camel plugins in a project and generates extra descriptor information for easier auto-discovery in Camel. * @@ -105,12 +104,18 @@ public class PackageDataFormatMojo extends AbstractMojo { public static void prepareDataFormat(Log log, MavenProject project, MavenProjectHelper projectHelper, File dataFormatOutDir, File schemaOutDir, BuildContext buildContext) throws MojoExecutionException { + File camelMetaDir = new File(dataFormatOutDir, "META-INF/services/org/apache/camel/"); + + // first we need to setup the output directory because the next check + // can stop the build before the end and eclipse always needs to know about that directory + if (projectHelper != null) { + projectHelper.addResource(project, dataFormatOutDir.getPath(), Collections.singletonList("**/dataformat.properties"), Collections.emptyList()); + } + if (!PackageHelper.haveResourcesChanged(log, project, buildContext, "META-INF/services/org/apache/camel/dataformat")) { return; } - File camelMetaDir = new File(dataFormatOutDir, "META-INF/services/org/apache/camel/"); - Map<String, String> javaTypes = new HashMap<String, String>(); StringBuilder buffer = new StringBuilder(); @@ -139,6 +144,14 @@ public class PackageDataFormatMojo extends AbstractMojo { buffer.append(name); } + if (!buildContext.hasDelta(file)) { + // if this file has not changed, + // then no need to store the javatype + // for the json file to be generated again + // (but we do need the name above!) + continue; + } + // find out the javaType for each data format try { String text = loadText(new FileInputStream(file)); @@ -219,11 +232,9 @@ public class PackageDataFormatMojo extends AbstractMojo { dir.mkdirs(); File out = new File(dir, name + ".json"); - FileOutputStream fos = new FileOutputStream(out, false); - fos.write(schema.getBytes()); - fos.close(); - - buildContext.refresh(out); + try (OutputStream fos = buildContext.newFileOutputStream(out)) { + fos.write(schema.getBytes()); + } log.debug("Generated " + out + " containing JSon schema for " + name + " data format"); } @@ -250,14 +261,13 @@ public class PackageDataFormatMojo extends AbstractMojo { camelMetaDir.mkdirs(); File outFile = new File(camelMetaDir, "dataformat.properties"); try { - properties.store(new FileWriter(outFile), "Generated by camel-package-maven-plugin"); - buildContext.refresh(outFile); + try(OutputStream os = buildContext.newFileOutputStream(outFile)) { + properties.store(os, "Generated by camel-package-maven-plugin"); + } + log.info("Generated " + outFile + " containing " + count + " Camel " + (count > 1 ? "dataformats: " : "dataformat: ") + names); if (projectHelper != null) { - List<String> includes = new ArrayList<String>(); - includes.add("**/dataformat.properties"); - projectHelper.addResource(project, dataFormatOutDir.getPath(), includes, new ArrayList<String>()); projectHelper.attachArtifact(project, "properties", "camelDataFormat", outFile); } } catch (IOException e) { http://git-wip-us.apache.org/repos/asf/camel/blob/fa88e170/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PackageLanguageMojo.java ---------------------------------------------------------------------- diff --git a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PackageLanguageMojo.java b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PackageLanguageMojo.java index 8af508d..6a932cd 100644 --- a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PackageLanguageMojo.java +++ b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PackageLanguageMojo.java @@ -22,13 +22,12 @@ import static org.apache.camel.maven.packaging.PackageHelper.parseAsMap; import java.io.File; import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; +import java.io.OutputStream; import java.net.URL; import java.net.URLClassLoader; -import java.util.ArrayList; +import java.util.Collections; import java.util.HashMap; import java.util.Iterator; import java.util.List; @@ -105,12 +104,18 @@ public class PackageLanguageMojo extends AbstractMojo { public static void prepareLanguage(Log log, MavenProject project, MavenProjectHelper projectHelper, File languageOutDir, File schemaOutDir, BuildContext buildContext) throws MojoExecutionException { + File camelMetaDir = new File(languageOutDir, "META-INF/services/org/apache/camel/"); + + // first we need to setup the output directory because the next check + // can stop the build before the end and eclipse always needs to know about that directory + if (projectHelper != null) { + projectHelper.addResource(project, languageOutDir.getPath(), Collections.singletonList("**/dataformat.properties"), Collections.emptyList()); + } + if (!PackageHelper.haveResourcesChanged(log, project, buildContext, "META-INF/services/org/apache/camel/language")) { return; } - File camelMetaDir = new File(languageOutDir, "META-INF/services/org/apache/camel/"); - Map<String, String> javaTypes = new HashMap<String, String>(); StringBuilder buffer = new StringBuilder(); @@ -139,6 +144,14 @@ public class PackageLanguageMojo extends AbstractMojo { buffer.append(name); } + if (!buildContext.hasDelta(file)) { + // if this file has not changed, + // then no need to store the javatype + // for the json file to be generated again + // (but we do need the name above!) + continue; + } + // find out the javaType for each data format try { String text = loadText(new FileInputStream(file)); @@ -215,10 +228,10 @@ public class PackageLanguageMojo extends AbstractMojo { dir.mkdirs(); File out = new File(dir, name + ".json"); - FileOutputStream fos = new FileOutputStream(out, false); - fos.write(schema.getBytes()); - fos.close(); - + try (OutputStream fos = buildContext.newFileOutputStream(out)) { + fos.write(schema.getBytes()); + } + buildContext.refresh(out); log.debug("Generated " + out + " containing JSon schema for " + name + " language"); @@ -246,14 +259,13 @@ public class PackageLanguageMojo extends AbstractMojo { camelMetaDir.mkdirs(); File outFile = new File(camelMetaDir, "language.properties"); try { - properties.store(new FileWriter(outFile), "Generated by camel-package-maven-plugin"); - buildContext.refresh(outFile); + try(OutputStream os = buildContext.newFileOutputStream(outFile)) { + properties.store(os, "Generated by camel-package-maven-plugin"); + } + log.info("Generated " + outFile + " containing " + count + " Camel " + (count > 1 ? "languages: " : "language: ") + names); if (projectHelper != null) { - List<String> includes = new ArrayList<String>(); - includes.add("**/language.properties"); - projectHelper.addResource(project, languageOutDir.getPath(), includes, new ArrayList<String>()); projectHelper.attachArtifact(project, "properties", "camelLanguage", outFile); } } catch (IOException e) {