All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.codehaus.mojo.jaxb2.javageneration.TestXjcMojo Maven / Gradle / Ivy

Go to download

Mojo's JAXB-2 Maven plugin is used to create an object graph from XSDs based on the JAXB 2.x implementation and to generate XSDs from JAXB annotated Java classes.

There is a newer version: 3.2.0
Show newest version
package org.codehaus.mojo.jaxb2.javageneration;

/*
 * 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.
 */

import org.apache.maven.artifact.DependencyResolutionRequiredException;
import org.apache.maven.model.Resource;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugins.annotations.LifecyclePhase;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
import org.apache.maven.plugins.annotations.ResolutionScope;
import org.codehaus.mojo.jaxb2.AbstractJaxbMojo;
import org.codehaus.mojo.jaxb2.shared.FileSystemUtilities;
import org.codehaus.mojo.jaxb2.shared.filters.Filter;
import org.codehaus.mojo.jaxb2.shared.filters.Filters;
import org.codehaus.mojo.jaxb2.shared.filters.pattern.PatternFileFilter;

import java.io.File;
import java.net.URL;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

/**
 * 

Mojo that creates test-scope Java source or binaries from XML schema(s) * by invoking the JAXB XJC binding compiler. This implementation is tailored * to use the JAXB Reference Implementation from project Kenai.

*

Note that the TestXjcMojo was completely re-implemented for the 2.x versions. * Its configuration semantics and parameter set is not necessarily * backwards compatible with the 1.x plugin versions. If you are * upgrading from version 1.x of the plugin, read the documentation carefully.

* * @author Lennart Jörelid * @see The JAXB Reference Implementation */ @Mojo(name = "testXjc", defaultPhase = LifecyclePhase.GENERATE_TEST_SOURCES, requiresDependencyResolution = ResolutionScope.TEST, threadSafe = false) public class TestXjcMojo extends AbstractJavaGeneratorMojo { /** * The last part of the stale fileName for this TestXjcMojo. */ public static final String STALE_FILENAME = "testXjcStaleFlag"; /** * Standard directory path (relative to basedir) searched recursively for test * source files (typically XSDs), unless overridden by an testSources configuration element. */ public static final String STANDARD_TEST_SOURCE_DIRECTORY = "src/test/xsd"; /** * Default exclude Filters for test sources, used unless overridden by an * explicit configuration in the {@code testSourceExcludeFilters} parameter. */ public static final List> STANDARD_TEST_SOURCE_EXCLUDE_FILTERS; /** *

Standard directory path (relative to basedir) searched recursively for XJB * files, unless overridden by an testXjbSources configuration element. * As explained in the JAXB specification, XJB files (JAXB Xml Binding files) * are used to configure parts of the Java source generation.

*/ public static final String STANDARD_TEST_XJB_DIRECTORY = "src/test/xjb"; /** * Default List of exclude Filters for XJB files, unless overridden by providing * an explicit configuration in the {@code testXjbExcludeFilters} parameter. */ public static final List> STANDARD_TEST_XJB_EXCLUDE_FILTERS; static { final List> xjbTemp = new ArrayList>(); xjbTemp.addAll(AbstractJaxbMojo.STANDARD_EXCLUDE_FILTERS); xjbTemp.add(new PatternFileFilter(Arrays.asList("\\.xsd"), true)); STANDARD_TEST_XJB_EXCLUDE_FILTERS = Collections.unmodifiableList(xjbTemp); final List> xsdTemp = new ArrayList>(); xsdTemp.addAll(AbstractJaxbMojo.STANDARD_EXCLUDE_FILTERS); xsdTemp.add(new PatternFileFilter(Arrays.asList("\\.xjb"), true)); STANDARD_TEST_SOURCE_EXCLUDE_FILTERS = Collections.unmodifiableList(xsdTemp); } /** *

Corresponding XJC parameter: {@code d}.

*

The working directory where the generated Java test source files are created.

*/ @Parameter(defaultValue = "${project.build.directory}/generated-test-sources/jaxb", required = true) private File outputDirectory; /** *

Parameter holding List of XSD paths to files and/or directories which should be recursively searched * for XSD files. Only files or directories that actually exist will be included (in the case of files) * or recursively searched for XSD files to include (in the case of directories). * Configure using standard Maven structure for Lists:

*
     * 
     *   <configuration>
     *   ...
     *       <testSources>
     *          <testSource>some/explicit/relative/file.xsd</testSource>
     *          <testSource>/another/absolute/path/to/a/specification.xsd</testSource>
     *          <testSource>a/directory/holding/xsds</testSource>
     *      </testSources>
     *   </configuration>
     * 
     * 
* * @see #STANDARD_TEST_SOURCE_DIRECTORY */ @Parameter(required = false) private List testSources; /** *

Parameter holding List of XJB Files and/or directories which should be recursively searched * for XJB files. Only files or directories that actually exist will be included (in the case of files) * or recursively searched for XJB files to include (in the case of directories). JAXB binding files are * used to configure parts of the Java source generation. * Supply the configuration using the standard Maven structure for configuring plugin Lists:

*
     * 
     *   <configuration>
     *   ...
     *       <testXjbSources>
     *          <testXjbSource>bindings/aBindingConfiguration.xjb</testXjbSource>
     *          <testXjbSource>bindings/config/directory</testXjbSource>
     *      </testXjbSources>
     *   </configuration>
     * 
     * 
* * @see #STANDARD_TEST_XJB_DIRECTORY */ @Parameter(required = false) private List testXjbSources; /** *

Parameter holding a List of Filters, used to match all files under the {@code testSources} directories * which should not be considered XJC test source files. (The filters identify files to * exclude, and hence this parameter is called {@code testS§ourceExcludeFilters}). If a file under any of the * test source directories matches at least one of the Filters supplied in the {@code testSourceExcludeFilters}, * it is not considered an XJC source file, and therefore excluded from processing.

*

If not explicitly provided, the Mojo uses the value within {@code STANDARD_TEST_SOURCE_EXCLUDE_FILTERS}. * The algorithm for finding XJC test sources is as follows:

*
    *
  1. Find all files given in the testSources List. Any Directories provided are searched for files * recursively.
  2. *
  3. Exclude any found files matching any of the supplied {@code testSourceExcludeFilters} List.
  4. *
  5. The remaining Files are submitted for processing by the XJC tool.
  6. *
*

Example: The following configuration would exclude any sources whose names end with * {@code txt} or {@code foo}:

*
     *     
     *         <configuration>
     *         ...
     *              <testSourceExcludeFilters>
     *                  <suffixFilter impl="org.codehaus.mojo.jaxb2.shared.filters.source.ExclusionRegularExpressionFileFilter">txt</suffixFilter>
     *                  <suffixFilter impl="org.codehaus.mojo.jaxb2.shared.filters.source.ExclusionRegularExpressionFileFilter">foo</suffixFilter>
     *              </testSourceExcludeFilters>
     *         </configuration>
     *     
     * 
* * @see #STANDARD_TEST_SOURCE_EXCLUDE_FILTERS * @see org.codehaus.mojo.jaxb2.shared.filters.pattern.PatternFileFilter * @see org.codehaus.mojo.jaxb2.shared.filters.pattern.AbstractPatternFilter * @see org.codehaus.mojo.jaxb2.shared.filters.AbstractFilter */ @Parameter(required = false) private List> testSourceExcludeFilters; /*** *

Parameter holding a List of Filters, used to match all files under the {@code testXjbSources} directories * which should not be considered XJB files. (The filters identify files to exclude, and hence * this parameter is called {@code testXjbExcludeFilters}). If a file matches at least one of the supplied Filters, * it is not considered an XJB file, and therefore excluded from processing.

*

If not explicitly provided, the Mojo uses the value within {@code STANDARD_TEST_XJB_EXCLUDE_FILTERS}.

*

Example: The following configuration would exclude any XJB files whose names end with * {@code xml} or {@code foo}:

*
     *     
     *         <configuration>
     *         ...
     *              <testXjbExcludeFilters>
     *                  <suffixFilter impl="org.codehaus.mojo.jaxb2.shared.filters.source.ExclusionRegularExpressionFileFilter">xml</suffixFilter>
     *                  <suffixFilter impl="org.codehaus.mojo.jaxb2.shared.filters.source.ExclusionRegularExpressionFileFilter">foo</suffixFilter>
     *              </sourceExcludeFilters>
     *         </testXjbExcludeFilters>
     *     
     * 
* * @see #STANDARD_TEST_XJB_EXCLUDE_FILTERS * @see org.codehaus.mojo.jaxb2.shared.filters.pattern.PatternFileFilter * @see org.codehaus.mojo.jaxb2.shared.filters.pattern.AbstractPatternFilter * @see org.codehaus.mojo.jaxb2.shared.filters.AbstractFilter */ @Parameter(required = false) private List> testXjbExcludeFilters; /** * Indicate if the XjcMojo execution should be skipped. */ @Parameter(property = "xjc.test.skip", defaultValue = "false") private boolean skipTestXjc; /** * {@inheritDoc} */ @Override protected boolean shouldExecutionBeSkipped() { return skipTestXjc; } /** * {@inheritDoc} */ @Override protected List getSources() { final List> excludePatterns = testSourceExcludeFilters == null ? STANDARD_TEST_SOURCE_EXCLUDE_FILTERS : testSourceExcludeFilters; Filters.initialize(getLog(), excludePatterns); // All done. return FileSystemUtilities.filterFiles( getProject().getBasedir(), testSources, Arrays.asList(STANDARD_TEST_SOURCE_DIRECTORY), getLog(), "testSources", excludePatterns); } /** * {@inheritDoc} */ @Override protected List getSourceXJBs() { final List> excludePatterns = testXjbExcludeFilters == null ? STANDARD_TEST_XJB_EXCLUDE_FILTERS : testXjbExcludeFilters; Filters.initialize(getLog(), excludePatterns); return FileSystemUtilities.filterFiles( getProject().getBasedir(), testXjbSources, STANDARD_TEST_XJB_DIRECTORY, getLog(), "testXjbSources", excludePatterns); } /** * {@inheritDoc} */ @Override protected String getStaleFileName() { return STALE_FILENAME; } /** * {@inheritDoc} */ @Override protected File getOutputDirectory() { return outputDirectory; } /** * {@inheritDoc} */ @Override protected List getClasspath() throws MojoExecutionException { try { return (List) getProject().getTestClasspathElements(); } catch (DependencyResolutionRequiredException e) { throw new MojoExecutionException("Could not retrieve Compile classpath.", e); } } /** * {@inheritDoc} */ @Override protected void addGeneratedSourcesToProjectSourceRoot() { getProject().addTestCompileSourceRoot(getOutputDirectory().getAbsolutePath()); } /** * {@inheritDoc} */ @Override protected void addResource(final Resource resource) { getProject().addTestResource(resource); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy