MYFACES-2956 build-metadata goal does not take into account exclude generated source directory on myfaces-builder-plugin
diff --git a/maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/builder/BuildMetaDataMojo.java b/maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/builder/BuildMetaDataMojo.java
index 34f5bbd..cd82262 100644
--- a/maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/builder/BuildMetaDataMojo.java
+++ b/maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/builder/BuildMetaDataMojo.java
@@ -253,7 +253,16 @@
* @parameter
*/
private List sourceDirectories;
-
+
+ /**
+ * The directory where all generated files are created. This directory is added as a
+ * compile source root automatically like src/main/java is.
+ *
+ * @since 1.0.8
+ * @parameter expression="${project.build.directory}/generated-sources/myfaces-builder-plugin"
+ */
+ private File generatedSourceDirectory;
+
/**
* Create a metadata file containing information imported from other projects
* plus data extracted from annotated classes in this project.
@@ -296,14 +305,34 @@
}
}
+ ModelParams parameters = new ModelParams();
+
+ List sourceDirs = new ArrayList();
if (sourceDirectories == null)
{
- buildModel(model, project);
+ sourceDirs.addAll(project.getCompileSourceRoots());
}
else
{
- buildModel(model, sourceDirectories);
+ sourceDirs.addAll(sourceDirectories);
}
+
+ if (generatedSourceDirectory != null)
+ {
+ for (Iterator it = sourceDirs.iterator(); it.hasNext();)
+ {
+ File f = new File((String) it.next());
+ if (generatedSourceDirectory.equals(f))
+ {
+ it.remove();
+ }
+ }
+ }
+
+ parameters.setSourceDirs(sourceDirs);
+
+ buildModel(model, project, parameters);
+
resolveReplacePackage(model);
IOUtils.saveModel(model, new File(targetDirectory, outputFile));
@@ -392,38 +421,22 @@
/**
* Execute ModelBuilder classes to create the Model data-structure.
*/
- private Model buildModel(Model model, MavenProject project)
+ private Model buildModel(Model model, MavenProject project, ModelParams parameters)
throws MojoExecutionException
{
try
{
QdoxModelBuilder builder = new QdoxModelBuilder();
model.setModelId(modelId);
- builder.buildModel(model, project,includes,excludes);
- return model;
- }
- catch (BuildException e)
- {
- throw new MojoExecutionException("Unable to build metadata", e);
- }
- }
-
- private Model buildModel(Model model, List dirs)
- throws MojoExecutionException
- {
- try
- {
- QdoxModelBuilder builder = new QdoxModelBuilder();
- model.setModelId(modelId);
- if (StringUtils.isNotEmpty(includes) ||
- StringUtils.isNotEmpty(excludes))
+ if (StringUtils.isNotEmpty(includes))
{
- builder.buildModel(model, dirs, includes, excludes);
+ parameters.setIncludes(includes);
}
- else
+ if (StringUtils.isNotEmpty(excludes))
{
- builder.buildModel(model, dirs);
+ parameters.setExcludes(excludes);
}
+ builder.buildModel(model, parameters);
return model;
}
catch (BuildException e)
diff --git a/maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/builder/IOUtils.java b/maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/builder/IOUtils.java
index e6cefec..9b0318d 100644
--- a/maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/builder/IOUtils.java
+++ b/maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/builder/IOUtils.java
@@ -149,10 +149,10 @@
//is banned, all here is generated
//so we don't take a look at this directory
//if (srcDir.matches(".*\\W+target\\W+myfaces-builder-plugin\\W+main\\W+.*"))
- if (srcDir.matches(".*\\W+target\\W+generated-sources\\W+myfaces-builder-plugin"))
- {
- continue;
- }
+ //if (srcDir.matches(".*\\W+target\\W+generated-sources\\W+myfaces-builder-plugin"))
+ //{
+ // continue;
+ //}
File f = new File(srcDir,filename);
if (f.exists())
diff --git a/maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/builder/ModelBuilder.java b/maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/builder/ModelBuilder.java
index 74a81db..cb09c1a 100644
--- a/maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/builder/ModelBuilder.java
+++ b/maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/builder/ModelBuilder.java
@@ -19,7 +19,6 @@
package org.apache.myfaces.buildtools.maven2.plugin.builder;
import org.apache.maven.plugin.MojoExecutionException;
-import org.apache.maven.project.MavenProject;
import org.apache.myfaces.buildtools.maven2.plugin.builder.model.Model;
/**
@@ -41,21 +40,6 @@
* Given a model (which might already be partly populated with data, add
* information about JSF artifacts.
*/
- public void buildModel(Model model, MavenProject project)
+ public void buildModel(Model model, ModelParams parameters)
throws MojoExecutionException;
-
- /**
- * Given a model (which might already be partly populated with data, add
- * information about JSF artifacts, indicating include and exclude
- * rules
- *
- * @since 1.0.2
- * @param model the model to add the information
- * @param project the maven project to analyze
- * @param includes rules to include files
- * @param excludes rules to exclude files
- * @throws MojoExecutionException
- */
- public void buildModel(Model model, MavenProject project, String includes, String excludes)
- throws MojoExecutionException;
}
\ No newline at end of file
diff --git a/maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/builder/ModelParams.java b/maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/builder/ModelParams.java
new file mode 100644
index 0000000..be597a4
--- /dev/null
+++ b/maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/builder/ModelParams.java
@@ -0,0 +1,59 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.myfaces.buildtools.maven2.plugin.builder;
+
+import java.util.List;
+
+public class ModelParams
+{
+ private String includes;
+
+ private String excludes;
+
+ private List sources;
+
+ public ModelParams()
+ {
+ super();
+ }
+ public String getIncludes()
+ {
+ return includes;
+ }
+ public void setIncludes(String includes)
+ {
+ this.includes = includes;
+ }
+ public String getExcludes()
+ {
+ return excludes;
+ }
+ public void setExcludes(String excludes)
+ {
+ this.excludes = excludes;
+ }
+ public List getSourceDirs()
+ {
+ return sources;
+ }
+ public void setSourceDirs(List sources)
+ {
+ this.sources = sources;
+ }
+}
diff --git a/maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/builder/qdox/QdoxModelBuilder.java b/maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/builder/qdox/QdoxModelBuilder.java
index 0f4d579..5c21ffe 100644
--- a/maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/builder/qdox/QdoxModelBuilder.java
+++ b/maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/builder/qdox/QdoxModelBuilder.java
@@ -32,9 +32,9 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.maven.plugin.MojoExecutionException;
-import org.apache.maven.project.MavenProject;
import org.apache.myfaces.buildtools.maven2.plugin.builder.IOUtils;
import org.apache.myfaces.buildtools.maven2.plugin.builder.ModelBuilder;
+import org.apache.myfaces.buildtools.maven2.plugin.builder.ModelParams;
import org.apache.myfaces.buildtools.maven2.plugin.builder.model.AttributeMeta;
import org.apache.myfaces.buildtools.maven2.plugin.builder.model.BehaviorMeta;
import org.apache.myfaces.buildtools.maven2.plugin.builder.model.ClassMeta;
@@ -122,42 +122,36 @@
* containing info extracted from the doc-annotation attributes and
* introspected info about the item the annotation is attached to.
*/
- public void buildModel(Model model, MavenProject project)
+ public void buildModel(Model model, ModelParams parameters)
throws MojoExecutionException
{
- buildModel(model, project.getCompileSourceRoots());
- }
-
- /**
- * @since 1.0.2
- */
- public void buildModel(Model model, MavenProject project, String includes, String excludes)
- throws MojoExecutionException
- {
- if (StringUtils.isNotEmpty(includes) ||
- StringUtils.isNotEmpty(excludes))
- {
- buildModel(model, project.getCompileSourceRoots(),includes, excludes);
- }
- else
- {
- buildModel(model, project.getCompileSourceRoots());
- }
- }
-
- /**
- * @since 1.0.2
- */
- public void buildModel(Model model, List sourceDirs, String includes, String excludes)
- throws MojoExecutionException
- {
String currModelId = model.getModelId();
if (currModelId == null)
{
throw new MojoExecutionException("Model must have id set");
}
- //System.out.println("includes:"+includes+" excludes:"+excludes);
+ JavaClass[] classes = getSourceClasses(parameters.getSourceDirs(),
+ parameters.getIncludes(), parameters.getExcludes());
+
+ buildModel(model, parameters.getSourceDirs(), classes);
+ }
+
+ private JavaClass[] getSourceClasses(List sourceDirs, String includes, String excludes)
+ {
+ if (StringUtils.isNotEmpty(includes) ||
+ StringUtils.isNotEmpty(excludes))
+ {
+ return getInnerSourceClasses(sourceDirs, includes, excludes);
+ }
+ else
+ {
+ return getInnerSourceClasses(sourceDirs);
+ }
+ }
+
+ private JavaClass[] getInnerSourceClasses(List sourceDirs, String includes, String excludes)
+ {
JavaDocBuilder builder = new JavaDocBuilder();
IncludeExcludeFileSelector selector =
@@ -189,40 +183,20 @@
QdoxHelper.addFileToJavaDocBuilder(builder, selector, srcDir);
}
- JavaClass[] classes = builder.getClasses();
-
- buildModel(model, sourceDirs, classes);
+ return builder.getClasses();
}
-
- /**
- * Scan the source tree for doc-annotations, and build Model objects
- * containing info extracted from the doc-annotation attributes and
- * introspected info about the item the annotation is attached to.
- */
- public void buildModel(Model model, List sourceDirs)
- throws MojoExecutionException
+
+ private JavaClass[] getInnerSourceClasses(List sourceDirs)
{
- String currModelId = model.getModelId();
- if (currModelId == null)
- {
- throw new MojoExecutionException("Model must have id set");
- }
-
JavaDocBuilder builder = new JavaDocBuilder();
-
- // need a File object representing the original source tree
- //
- // TODO: make this more flexible, so specific classes can
- // be included and excluded.
+
for (Iterator i = sourceDirs.iterator(); i.hasNext();)
{
String srcDir = (String) i.next();
builder.addSourceTree(new File(srcDir));
}
- JavaClass[] classes = builder.getClasses();
-
- buildModel(model, sourceDirs, classes);
+ return builder.getClasses();
}
protected void buildModel(Model model, List sourceDirs, JavaClass[] classes)
diff --git a/maven2-plugins/myfaces-builder-plugin/src/test/java/org/apache/myfaces/buildtools/maven2/plugin/builder/qdox/QdoxModelBuilderTest.java b/maven2-plugins/myfaces-builder-plugin/src/test/java/org/apache/myfaces/buildtools/maven2/plugin/builder/qdox/QdoxModelBuilderTest.java
index 60b8faf..79a43f3 100644
--- a/maven2-plugins/myfaces-builder-plugin/src/test/java/org/apache/myfaces/buildtools/maven2/plugin/builder/qdox/QdoxModelBuilderTest.java
+++ b/maven2-plugins/myfaces-builder-plugin/src/test/java/org/apache/myfaces/buildtools/maven2/plugin/builder/qdox/QdoxModelBuilderTest.java
@@ -28,12 +28,15 @@
import java.io.StringWriter;
import java.net.URL;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
+import java.util.Map;
import junit.framework.TestCase;
import org.apache.myfaces.buildtools.maven2.plugin.builder.IOUtils;
+import org.apache.myfaces.buildtools.maven2.plugin.builder.ModelParams;
import org.apache.myfaces.buildtools.maven2.plugin.builder.model.ComponentMeta;
import org.apache.myfaces.buildtools.maven2.plugin.builder.model.Model;
import org.apache.myfaces.buildtools.maven2.plugin.builder.model.PropertyMeta;
@@ -67,7 +70,10 @@
File parentDir = new File(parentDirName);
List sourceDirs = new ArrayList();
sourceDirs.add(parentDir.getAbsolutePath());
- builder.buildModel(model, sourceDirs);
+
+ ModelParams parameters = new ModelParams();
+ parameters.setSourceDirs(sourceDirs);
+ builder.buildModel(model, parameters);
assertEquals(1, model.getComponents().size());
ComponentMeta cm = (ComponentMeta) model.getComponents().get(0);
@@ -95,7 +101,9 @@
Model model = new Model();
model.setModelId("test");
- builder.buildModel(model, sourceDirs);
+ ModelParams parameters = new ModelParams();
+ parameters.setSourceDirs(sourceDirs);
+ builder.buildModel(model, parameters);
// basic sanity checks
assertTrue(model.getComponents().size() > 0);
@@ -128,7 +136,9 @@
Model model = new Model();
model.setModelId("test");
- builder.buildModel(model, sourceDirs);
+ ModelParams parameters = new ModelParams();
+ parameters.setSourceDirs(sourceDirs);
+ builder.buildModel(model, parameters);
// basic sanity checks
assertTrue(model.getComponents().size() > 0);
@@ -163,7 +173,9 @@
Model model = new Model();
model.setModelId("test");
- builder.buildModel(model, sourceDirs);
+ ModelParams parameters = new ModelParams();
+ parameters.setSourceDirs(sourceDirs);
+ builder.buildModel(model, parameters);
// basic sanity checks
assertTrue(model.getComponents().size() > 0);
@@ -198,7 +210,9 @@
Model model = new Model();
model.setModelId("test");
- builder.buildModel(model, sourceDirs);
+ ModelParams parameters = new ModelParams();
+ parameters.setSourceDirs(sourceDirs);
+ builder.buildModel(model, parameters);
// basic sanity checks
assertTrue(model.getComponents().size() > 0);