summaryrefslogtreecommitdiffstats
path: root/maven-plugins/tags/tuscany-bundle-plugin-1.0.8/src/main/java/org/apache/tuscany/maven/plugin/eclipse/EclipsePlugin.java
diff options
context:
space:
mode:
Diffstat (limited to 'maven-plugins/tags/tuscany-bundle-plugin-1.0.8/src/main/java/org/apache/tuscany/maven/plugin/eclipse/EclipsePlugin.java')
-rw-r--r--maven-plugins/tags/tuscany-bundle-plugin-1.0.8/src/main/java/org/apache/tuscany/maven/plugin/eclipse/EclipsePlugin.java1877
1 files changed, 0 insertions, 1877 deletions
diff --git a/maven-plugins/tags/tuscany-bundle-plugin-1.0.8/src/main/java/org/apache/tuscany/maven/plugin/eclipse/EclipsePlugin.java b/maven-plugins/tags/tuscany-bundle-plugin-1.0.8/src/main/java/org/apache/tuscany/maven/plugin/eclipse/EclipsePlugin.java
deleted file mode 100644
index 781bc130d9..0000000000
--- a/maven-plugins/tags/tuscany-bundle-plugin-1.0.8/src/main/java/org/apache/tuscany/maven/plugin/eclipse/EclipsePlugin.java
+++ /dev/null
@@ -1,1877 +0,0 @@
-/*
- * 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.tuscany.maven.plugin.eclipse;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Iterator;
-import java.util.LinkedHashSet;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.ListIterator;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.handler.ArtifactHandler;
-import org.apache.maven.model.Build;
-import org.apache.maven.model.Plugin;
-import org.apache.maven.model.Resource;
-import org.apache.maven.plugin.MojoExecutionException;
-import org.apache.maven.plugin.eclipse.BuildCommand;
-import org.apache.maven.plugin.eclipse.Constants;
-import org.apache.maven.plugin.eclipse.EclipseConfigFile;
-import org.apache.maven.plugin.eclipse.EclipseSourceDir;
-import org.apache.maven.plugin.eclipse.WorkspaceConfiguration;
-import org.apache.maven.plugin.eclipse.reader.ReadWorkspaceLocations;
-import org.apache.maven.plugin.eclipse.writers.EclipseAjdtWriter;
-import org.apache.maven.plugin.eclipse.writers.EclipseManifestWriter;
-import org.apache.maven.plugin.eclipse.writers.EclipseSettingsWriter;
-import org.apache.maven.plugin.eclipse.writers.EclipseWriterConfig;
-import org.apache.maven.plugin.eclipse.writers.wtp.EclipseWtpApplicationXMLWriter;
-import org.apache.maven.plugin.eclipse.writers.wtp.EclipseWtpComponent15Writer;
-import org.apache.maven.plugin.eclipse.writers.wtp.EclipseWtpComponentWriter;
-import org.apache.maven.plugin.eclipse.writers.wtp.EclipseWtpFacetsWriter;
-import org.apache.maven.plugin.eclipse.writers.wtp.EclipseWtpmodulesWriter;
-import org.apache.maven.plugin.ide.IdeDependency;
-import org.apache.maven.plugin.ide.IdeUtils;
-import org.apache.maven.plugin.ide.JeeUtils;
-import org.apache.maven.project.MavenProject;
-import org.codehaus.plexus.resource.ResourceManager;
-import org.codehaus.plexus.resource.loader.FileResourceLoader;
-import org.codehaus.plexus.resource.loader.ResourceNotFoundException;
-import org.codehaus.plexus.util.FileUtils;
-import org.codehaus.plexus.util.IOUtil;
-import org.codehaus.plexus.util.StringUtils;
-import org.codehaus.plexus.util.xml.Xpp3Dom;
-
-/**
- * Generates the following eclipse configuration files:
- * <ul>
- * <li><code>.project</code> and <code>.classpath</code> files</li>
- * <li><code>.setting/org.eclipse.jdt.core.prefs</code> with project specific compiler settings</li>
- * <li>various configuration files for WTP (Web Tools Project), if the parameter <code>wtpversion</code> is set to a
- * valid version (WTP configuration is not generated by default)</li>
- * </ul>
- * If this goal is run on a multiproject root, dependencies between modules will be configured as direct project
- * dependencies in Eclipse (unless <code>useProjectReferences</code> is set to <code>false</code>).
- *
- * @author <a href="mailto:trygvis@inamo.no">Trygve Laugst&oslash;l</a>
- * @author <a href="mailto:fgiust@apache.org">Fabrizio Giustina</a>
- * @version $Id: EclipsePlugin.java 756392 2009-03-20 09:46:09Z baerrach $
- * @goal eclipse
- * @execute phase="generate-resources"
- */
-public class EclipsePlugin
- extends AbstractIdeSupportMojo
-{
- private static final String WEAVE_DEPENDENCY = "weaveDependency";
-
- private static final String WEAVE_DEPENDENCIES = "weaveDependencies";
-
- private static final String ASPECT_LIBRARY = "aspectLibrary";
-
- private static final String ASPECT_LIBRARIES = "aspectLibraries";
-
- private static final String ASPECT_DIRECTORY = "aspectDirectory";
-
- private static final String TEST_ASPECT_DIRECTORY = "testAspectDirectory";
-
- private static final String ASPECTJ_MAVEN_PLUGIN = "aspectj-maven-plugin";
-
- private static final String ORG_CODEHAUS_MOJO = "org.codehaus.mojo";
-
- private static final String DEFAULT_TEST_ASPECT_DIRECTORY = "src/test/aspect";
-
- private static final String DEFAULT_ASPECT_DIRECTORY = "src/main/aspect";
-
- private static final String NATURE_WST_FACET_CORE_NATURE = "org.eclipse.wst.common.project.facet.core.nature"; //$NON-NLS-1$
-
- private static final String BUILDER_WST_COMPONENT_STRUCTURAL_DEPENDENCY_RESOLVER =
- "org.eclipse.wst.common.modulecore.ComponentStructuralBuilderDependencyResolver"; //$NON-NLS-1$
-
- protected static final String BUILDER_WST_VALIDATION = "org.eclipse.wst.validation.validationbuilder"; //$NON-NLS-1$
-
- private static final String BUILDER_JDT_CORE_JAVA = "org.eclipse.jdt.core.javabuilder"; //$NON-NLS-1$
-
- private static final String BUILDER_WST_COMPONENT_STRUCTURAL =
- "org.eclipse.wst.common.modulecore.ComponentStructuralBuilder"; //$NON-NLS-1$
-
- private static final String BUILDER_WST_FACET = "org.eclipse.wst.common.project.facet.core.builder"; //$NON-NLS-1$
-
- private static final String BUILDER_PDE_MANIFEST = "org.eclipse.pde.ManifestBuilder"; //$NON-NLS-1$
-
- private static final String BUILDER_PDE_SCHEMA = "org.eclipse.pde.SchemaBuilder"; //$NON-NLS-1$
-
- private static final String BUILDER_AJDT_CORE_JAVA = "org.eclipse.ajdt.core.ajbuilder"; //$NON-NLS-1$
-
- private static final String NATURE_WST_MODULE_CORE_NATURE = "org.eclipse.wst.common.modulecore.ModuleCoreNature"; //$NON-NLS-1$
-
- private static final String NATURE_JDT_CORE_JAVA = "org.eclipse.jdt.core.javanature"; //$NON-NLS-1$
-
- private static final String NATURE_JEM_WORKBENCH_JAVA_EMF = "org.eclipse.jem.workbench.JavaEMFNature"; //$NON-NLS-1$
-
- private static final String NATURE_PDE_PLUGIN = "org.eclipse.pde.PluginNature"; //$NON-NLS-1$
-
- private static final String NATURE_AJDT_CORE_JAVA = "org.eclipse.ajdt.ui.ajnature"; //$NON-NLS-1$
-
- protected static final String COMMON_PATH_JDT_LAUNCHING_JRE_CONTAINER = "org.eclipse.jdt.launching.JRE_CONTAINER"; //$NON-NLS-1$
-
- protected static final String ASPECTJ_RT_CONTAINER = "org.eclipse.ajdt.core.ASPECTJRT_CONTAINER"; //$NON-NLS-1$
-
- protected static final String REQUIRED_PLUGINS_CONTAINER = "org.eclipse.pde.core.requiredPlugins"; //$NON-NLS-1$
-
- // warning, order is important for binary search
- public static final String[] WTP_SUPPORTED_VERSIONS = new String[] { "1.0", "1.5", "2.0", "R7", "none" }; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-
- /**
- * Constant for 'artifactId' element in POM.xml.
- */
- private static final String POM_ELT_ARTIFACT_ID = "artifactId"; //$NON-NLS-1$
-
- /**
- * Constant for 'groupId' element in POM.xml.
- */
- private static final String POM_ELT_GROUP_ID = "groupId"; //$NON-NLS-1$
-
- /**
- * List of eclipse project natures. By default the <code>org.eclipse.jdt.core.javanature</code> nature plus the
- * needed WTP natures are added. Natures added using this property <strong>replace</strong> the default list.
- *
- * <pre>
- * &lt;projectnatures&gt;
- * &lt;projectnature&gt;org.eclipse.jdt.core.javanature&lt;/projectnature&gt;
- * &lt;projectnature&gt;org.eclipse.wst.common.modulecore.ModuleCoreNature&lt;/projectnature&gt;
- * &lt;/projectnatures&gt;
- * </pre>
- *
- * @parameter
- */
- private List projectnatures;
-
- /**
- * List of artifact to exclude from eclipse classpath, beeing provided by some eclipse classPathContainer
- * [MECLIPSE-79]
- *
- * @since 2.5
- * @parameter
- */
- private List excludes;
-
- /**
- * List of eclipse project natures to be added to the default ones.
- *
- * <pre>
- * &lt;additionalProjectnatures&gt;
- * &lt;projectnature&gt;org.springframework.ide.eclipse.core.springnature&lt;/projectnature&gt;
- * &lt;/additionalProjectnatures&gt;
- * </pre>
- *
- * @parameter
- */
- private List additionalProjectnatures;
-
- /**
- * List of eclipse project facets to be added to the default ones.
- *
- * <pre>
- * &lt;additionalProjectFacets&gt;
- * &lt;jst.jsf&gt;1.1&lt;jst.jsf/&gt;
- * &lt;/additionalProjectFacets&gt;
- * </pre>
- *
- * @parameter
- */
- private Map additionalProjectFacets;
-
- /**
- * List of eclipse build commands. By default the <code>org.eclipse.jdt.core.javabuilder</code> builder plus the
- * needed WTP builders are added. If you specify any configuration for this parameter, only those buildcommands
- * specified will be used; the defaults won't be added. Use the <code>additionalBuildCommands</code> parameter for
- * that. Configuration example: Old style:
- *
- * <pre>
- * &lt;buildcommands&gt;
- * &lt;buildcommand&gt;org.eclipse.wst.common.modulecore.ComponentStructuralBuilder&lt;/buildcommand&gt;
- * &lt;buildcommand&gt;org.eclipse.jdt.core.javabuilder&lt;/buildcommand&gt;
- * &lt;buildcommand&gt;org.eclipse.wst.common.modulecore.ComponentStructuralBuilderDependencyResolver&lt;/buildcommand&gt;
- * &lt;/buildcommands&gt;
- * </pre>
- *
- * For new style, see <code>additionalBuildCommands</code>.
- *
- * @parameter
- */
- private List buildcommands;
-
- /**
- * List of eclipse build commands to be added to the default ones. Old style:
- *
- * <pre>
- * &lt;additionalBuildcommands&gt;
- * &lt;buildcommand&gt;org.springframework.ide.eclipse.core.springbuilder&lt;/buildcommand&gt;
- * &lt;/additionalBuildcommands&gt;
- * </pre>
- *
- * New style:
- *
- * <pre>
- * &lt;additionalBuildcommands&gt;
- * &lt;buildCommand&gt;
- * &lt;name&gt;org.ui.externaltools.ExternalToolBuilder&lt;/name&gt;
- * &lt;triggers&gt;auto,full,incremental,&lt;/triggers&gt;
- * &lt;arguments&gt;
- * &lt;LaunchConfigHandle&gt;&amp;lt;project&amp;gt;./externalToolBuilders/MavenBuilder.launch&lt;/LaunchConfighandle&gt;
- * &lt;/arguments&gt;
- * &lt;/buildCommand&gt;
- * &lt;/additionalBuildcommands&gt;
- * </pre>
- *
- * Note the difference between <code>build<strong>c</strong>ommand</code> and
- * <code>build<strong>C</strong>ommand</code>. You can mix and match old and new-style configuration entries.
- *
- * @parameter
- */
- private List additionalBuildcommands;
-
- /**
- * List of container classpath entries. By default the <code>org.eclipse.jdt.launching.JRE_CONTAINER</code>
- * classpath container is added. Configuration example:
- *
- * <pre>
- * &lt;classpathContainers&gt;
- * &lt;classpathContainer&gt;org.eclipse.jdt.launching.JRE_CONTAINER&lt;/classpathContainer&gt;
- * &lt;classpathContainer&gt;org.eclipse.jst.server.core.container/org.eclipse.jst.server.tomcat.runtimeTarget/Apache Tomcat v5.5&lt;/classpathContainer&gt;
- * &lt;classpathContainer&gt;org.eclipse.jst.j2ee.internal.web.container/artifact&lt;/classpathContainer&gt;
- * &lt;/classpathContainers&gt;
- * </pre>
- *
- * @parameter
- */
- private List classpathContainers;
-
- /**
- * Enables/disables the downloading of source attachments. Defaults to false. DEPRECATED - use downloadSources
- *
- * @parameter expression="${eclipse.downloadSources}"
- * @deprecated use downloadSources
- */
- private boolean eclipseDownloadSources;
-
- /**
- * Eclipse workspace directory.
- *
- * @parameter expression="${eclipse.projectDir}" alias="outputDir"
- */
- private File eclipseProjectDir;
-
- /**
- * When set to false, the plugin will not create sub-projects and instead reference those sub-projects using the
- * installed package in the local repository
- *
- * @parameter expression="${eclipse.useProjectReferences}" default-value="true"
- * @required
- */
- private boolean useProjectReferences;
-
- /**
- * The default output directory
- *
- * @parameter expression="${outputDirectory}" alias="outputDirectory"
- * default-value="${project.build.outputDirectory}"
- * @required
- */
- private File buildOutputDirectory;
-
- /**
- * The version of WTP for which configuration files will be generated. The default value is "none" (don't generate
- * WTP configuration), supported versions are "R7", "1.0", and "1.5"
- *
- * @parameter expression="${wtpversion}" default-value="none"
- */
- private String wtpversion;
-
- /**
- * JEE context name of the WTP module. ( ex. WEB context name ).
- *
- * @parameter expression="${wtpContextName}"
- */
- private String wtpContextName;
-
- /**
- * Is it an AJDT project? If yes, the plugin adds the necessary natures and build commands to the .project file.
- */
- private boolean ajdt;
-
- /**
- * The relative path of the manifest file
- *
- * @parameter expression="${eclipse.manifest}" default-value="${basedir}/META-INF/MANIFEST.MF"
- */
- private File manifest;
-
- /**
- * Allow to configure additional generic configuration files for eclipse that will be written out to disk when
- * running eclipse:eclipse. FOr each file you can specify the name and the text content.
- *
- * <pre>
- * &lt;plugin&gt;
- * &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
- * &lt;artifactId&gt;maven-eclipse-plugin&lt;/artifactId&gt;
- * &lt;configuration&gt;
- * &lt;additionalConfig&gt;
- * &lt;file&gt;
- * &lt;name&gt;.checkstyle&lt;/name&gt;
- * &lt;content&gt;
- * &lt;![CDATA[&lt;fileset-config file-format-version=&quot;1.2.0&quot; simple-config=&quot;true&quot;&gt;
- * &lt;fileset name=&quot;all&quot; enabled=&quot;true&quot; check-config-name=&quot;acme corporate style&quot; local=&quot;false&quot;&gt;
- * &lt;file-match-pattern match-pattern=&quot;.&quot; include-pattern=&quot;true&quot;/&gt;
- * &lt;/fileset&gt;
- * &lt;filter name=&quot;NonSrcDirs&quot; enabled=&quot;true&quot;/&gt;
- * &lt;/fileset-config&gt;]]&gt;
- * &lt;/content&gt;
- * &lt;/file&gt;
- * &lt;/additionalConfig&gt;
- * &lt;/configuration&gt;
- * &lt;/plugin&gt;
- * </pre>
- *
- * Instead of the content you can also define (from version 2.5) an url to download the file :
- *
- * <pre>
- * &lt;plugin&gt;
- * &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
- * &lt;artifactId&gt;maven-eclipse-plugin&lt;/artifactId&gt;
- * &lt;configuration&gt;
- * &lt;additionalConfig&gt;
- * &lt;file&gt;
- * &lt;name&gt;.checkstyle&lt;/name&gt;
- * &lt;url&gt;http://some.place.org/path/to/file&lt;/url&gt;
- * &lt;/file&gt;
- * &lt;/additionalConfig&gt;
- * &lt;/configuration&gt;
- * </pre>
- *
- * or a location :
- *
- * <pre>
- * &lt;plugin&gt;
- * &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
- * &lt;artifactId&gt;maven-eclipse-plugin&lt;/artifactId&gt;
- * &lt;configuration&gt;
- * &lt;additionalConfig&gt;
- * &lt;file&gt;
- * &lt;name&gt;.checkstyle&lt;/name&gt;
- * &lt;location&gt;/checkstyle-config.xml&lt;/location&gt;
- * &lt;/file&gt;
- * &lt;/additionalConfig&gt;
- * &lt;/configuration&gt;
- * &lt;dependencies&gt;
- * &lt;!-- The file defined in the location is stored in this dependency --&gt;
- * &lt;dependency&gt;
- * &lt;groupId&gt;eclipsetest&lt;/groupId&gt;
- * &lt;artifactId&gt;checkstyle-config&lt;/artifactId&gt;
- * &lt;version&gt;1.0&lt;/version&gt;
- * &lt;/dependency&gt;
- * &lt;/dependencies&gt;
- * &lt;/plugin&gt;
- * </pre>
- *
- * @parameter
- */
- private EclipseConfigFile[] additionalConfig;
-
- /**
- * If set to <code>true</code>, the version number of the artifact is appended to the name of the generated Eclipse
- * project. See projectNameTemplate for other options.
- *
- * @parameter expression="${eclipse.addVersionToProjectName}" default-value="false"
- */
- private boolean addVersionToProjectName;
-
- /**
- * If set to <code>true</code>, the groupId of the artifact is appended to the name of the generated Eclipse
- * project. See projectNameTemplate for other options.
- *
- * @parameter expression="${eclipse.addGroupIdToProjectName}" default-value="false"
- */
- private boolean addGroupIdToProjectName;
-
- /**
- * Allows configuring the name of the eclipse projects. This property if set wins over addVersionToProjectName and
- * addGroupIdToProjectName You can use <code>[groupId]</code>, <code>[artifactId]</code> and <code>[version]</code>
- * variables. eg. <code>[groupId].[artifactId]-[version]</code>
- *
- * @parameter expression="${eclipse.projectNameTemplate}"
- */
- private String projectNameTemplate;
-
- /**
- * Parsed wtp version.
- */
- private float wtpVersionFloat;
-
- /**
- * Not a plugin parameter. Is this a java project?
- */
- private boolean isJavaProject;
-
- /**
- * Must the manifest files be written for java projects so that that the jee classpath for wtp is correct.
- *
- * @parameter expression="${eclipse.wtpmanifest}" default-value="false"
- */
- private boolean wtpmanifest;
-
- /**
- * Must the application files be written for ear projects in a separate directory.
- *
- * @parameter expression="${eclipse.wtpapplicationxml}" default-value="false"
- */
- private boolean wtpapplicationxml;
-
- /**
- * What WTP defined server to use for deployment informations.
- *
- * @parameter expression="${eclipse.wtpdefaultserver}"
- */
- private String wtpdefaultserver;
-
- private WorkspaceConfiguration workspaceConfiguration;
-
- /**
- * ResourceManager for getting additonalConfig files from resources
- *
- * @component
- * @required
- * @readonly
- */
- private ResourceManager locator;
-
- /**
- * This eclipse workspace is read and all artifacts detected there will be connected as eclipse projects and will
- * not be linked to the jars in the local repository. Requirement is that it was created with the similar wtp
- * settings as the reactor projects, but the project name template my differ. The pom's in the workspace projects
- * may not contain variables in the artefactId, groupId and version tags.
- *
- * If workspace is not defined, then an attempt to locate it by checking up the directory hierarchy will be made.
- *
- * @since 2.5
- * @parameter expression="${eclipse.workspace}"
- */
- protected File workspace;
-
- /**
- * Limit the use of project references to the current workspace. No project references will be created to projects
- * in the reactor when they are not available in the workspace.
- *
- * @parameter expression="${eclipse.limitProjectReferencesToWorkspace}" default-value="false"
- */
- protected boolean limitProjectReferencesToWorkspace;
-
- /**
- * The version of AJDT for which configuration files will be generated. The default value is "1.5", supported
- * versions are "none", "1.4", and "1.5".
- *
- * @parameter expression="${eclipse.ajdtVersion}" default-value="1.5"
- */
- private String ajdtVersion;
-
- protected final boolean isJavaProject()
- {
- return isJavaProject;
- }
-
- protected final boolean isPdeProject()
- {
- return pde;
- }
-
- /**
- * Getter for <code>buildcommands</code>.
- *
- * @return Returns the buildcommands.
- */
- public final List getBuildcommands()
- {
- return buildcommands;
- }
-
- /**
- * Setter for <code>buildcommands</code>.
- *
- * @param buildcommands The buildcommands to set.
- */
- public final void setBuildcommands( List buildcommands )
- {
- this.buildcommands = buildcommands;
- }
-
- /**
- * Getter for <code>buildOutputDirectory</code>.
- *
- * @return Returns the buildOutputDirectory.
- */
- public final File getBuildOutputDirectory()
- {
- return buildOutputDirectory;
- }
-
- /**
- * Setter for <code>buildOutputDirectory</code>.
- *
- * @param buildOutputDirectory The buildOutputDirectory to set.
- */
- public final void setBuildOutputDirectory( File buildOutputDirectory )
- {
- this.buildOutputDirectory = buildOutputDirectory;
- }
-
- /**
- * Getter for <code>classpathContainers</code>.
- *
- * @return Returns the classpathContainers.
- */
- public final List getClasspathContainers()
- {
- return classpathContainers;
- }
-
- /**
- * Setter for <code>classpathContainers</code>.
- *
- * @param classpathContainers The classpathContainers to set.
- */
- public final void setClasspathContainers( List classpathContainers )
- {
- this.classpathContainers = classpathContainers;
- }
-
- /**
- * Getter for <code>eclipseProjectDir</code>.
- *
- * @return Returns the eclipseProjectDir.
- */
- public final File getEclipseProjectDir()
- {
- return eclipseProjectDir;
- }
-
- /**
- * Setter for <code>eclipseProjectDir</code>.
- *
- * @param eclipseProjectDir The eclipseProjectDir to set.
- */
- public final void setEclipseProjectDir( File eclipseProjectDir )
- {
- this.eclipseProjectDir = eclipseProjectDir;
- }
-
- /**
- * Getter for <code>projectnatures</code>.
- *
- * @return Returns the projectnatures.
- */
- public final List getProjectnatures()
- {
- return projectnatures;
- }
-
- /**
- * Setter for <code>projectnatures</code>.
- *
- * @param projectnatures The projectnatures to set.
- */
- public final void setProjectnatures( List projectnatures )
- {
- this.projectnatures = projectnatures;
- }
-
- /**
- * Getter for <code>useProjectReferences</code>.
- *
- * @return Returns the useProjectReferences.
- */
- public final boolean getUseProjectReferences()
- {
- return useProjectReferences;
- }
-
- /**
- * Setter for <code>useProjectReferences</code>.
- *
- * @param useProjectReferences The useProjectReferences to set.
- */
- public final void setUseProjectReferences( boolean useProjectReferences )
- {
- this.useProjectReferences = useProjectReferences;
- }
-
- /**
- * Getter for <code>wtpversion</code>.
- *
- * @return Returns the wtpversion.
- */
- public final String getWtpversion()
- {
- return wtpversion;
- }
-
- /**
- * Setter for <code>wtpversion</code>.
- *
- * @param wtpversion The wtpversion to set.
- */
- public final void setWtpversion( String wtpversion )
- {
- this.wtpversion = wtpversion;
- }
-
- /**
- * Getter for <code>additionalBuildcommands</code>.
- *
- * @return Returns the additionalBuildcommands.
- */
- public final List getAdditionalBuildcommands()
- {
- return additionalBuildcommands;
- }
-
- /**
- * Setter for <code>additionalBuildcommands</code>.
- *
- * @param additionalBuildcommands The additionalBuildcommands to set.
- */
- public final void setAdditionalBuildcommands( List additionalBuildcommands )
- {
- this.additionalBuildcommands = additionalBuildcommands;
- }
-
- /**
- * Getter for <code>additionalProjectnatures</code>.
- *
- * @return Returns the additionalProjectnatures.
- */
- public final List getAdditionalProjectnatures()
- {
- return additionalProjectnatures;
- }
-
- /**
- * Setter for <code>additionalProjectnatures</code>.
- *
- * @param additionalProjectnatures The additionalProjectnatures to set.
- */
- public final void setAdditionalProjectnatures( List additionalProjectnatures )
- {
- this.additionalProjectnatures = additionalProjectnatures;
- }
-
- /**
- * Getter for <code>addVersionToProjectName</code>.
- */
- public final boolean isAddVersionToProjectName()
- {
- return addVersionToProjectName;
- }
-
- /**
- * Setter for <code>addVersionToProjectName</code>.
- */
- public final void setAddVersionToProjectName( boolean addVersionToProjectName )
- {
- this.addVersionToProjectName = addVersionToProjectName;
- }
-
- /**
- * Getter for <code>addGroupIdToProjectName</code>.
- */
- public final boolean isAddGroupIdToProjectName()
- {
- return addGroupIdToProjectName;
- }
-
- /**
- * Setter for <code>addGroupIdToProjectName</code>.
- */
- public final void setAddGroupIdToProjectName( boolean addGroupIdToProjectName )
- {
- this.addGroupIdToProjectName = addGroupIdToProjectName;
- }
-
- /**
- * Getter for <code>projectNameTemplate</code>
- *
- * @return projectNameTemplate
- */
- public final String getProjectNameTemplate()
- {
- return projectNameTemplate;
- }
-
- /**
- * Setter for <code>projectNameTemplate</code>.
- *
- * @param projectNameTemplate projectNameTemplate
- */
- public final void setProjectNameTemplate( String projectNameTemplate )
- {
- this.projectNameTemplate = projectNameTemplate;
- }
-
- /**
- * @see org.apache.maven.plugin.Mojo#execute()
- */
- public final boolean setup()
- throws MojoExecutionException
- {
- boolean ready = true;
-
- checkDeprecations();
- setProjectNameTemplate( IdeUtils.calculateProjectNameTemplate( getProjectNameTemplate(), isAddVersionToProjectName(),
- isAddGroupIdToProjectName(), getLog() ) );
- ajdt = enableAjdt( executedProject ) && !ajdtVersion.equals( "none" );
- ready = validate();
-
- // TODO: Why are we using project in some places, and executedProject in others??
- ArtifactHandler artifactHandler = project.getArtifact().getArtifactHandler();
-
- // ear projects don't contain java sources
- // pde projects are always java projects
- isJavaProject =
- pde
- || ( Constants.LANGUAGE_JAVA.equals( artifactHandler.getLanguage() ) && !Constants.PROJECT_PACKAGING_EAR.equals( packaging ) );
-
- setupExtras();
-
- parseConfigurationOptions();
-
- // defaults
- if ( projectnatures == null )
- {
- fillDefaultNatures( packaging );
- }
-
- if ( additionalProjectnatures != null )
- {
- projectnatures.addAll( additionalProjectnatures );
- }
-
- if ( buildcommands == null )
- {
- fillDefaultBuilders( packaging );
- }
- else
- {
- convertBuildCommandList( buildcommands );
- }
-
- if ( additionalBuildcommands != null )
- {
- convertBuildCommandList( additionalBuildcommands );
- buildcommands.addAll( additionalBuildcommands );
- }
-
- if ( classpathContainers == null )
- {
- fillDefaultClasspathContainers( packaging );
- }
- else
- {
- verifyClasspathContainerListIsComplete();
- }
- locator.addSearchPath( FileResourceLoader.ID, project.getFile().getParentFile().getAbsolutePath() );
- locator.setOutputDirectory( new File( project.getBuild().getDirectory() ) );
-
- // ready to start
- return ready;
- }
-
- /**
- * Convert any Strings in the <code>commands</code> List to <code>BuildCommand</code>s. The conversion happens
- * in situ.
- *
- * @param commands a list of commands to convert into <code>BuildCommand</code>
- */
- protected final void convertBuildCommandList( List commands )
- {
- if ( commands != null )
- {
- for ( ListIterator i = commands.listIterator(); i.hasNext(); )
- {
- Object command = i.next();
-
- if ( command instanceof String )
- {
- command = new BuildCommand( (String) command );
- i.set( command );
- }
- }
- }
- }
-
- private void parseConfigurationOptions()
- {
- if ( "R7".equalsIgnoreCase( wtpversion ) ) //$NON-NLS-1$
- {
- wtpVersionFloat = 0.7f;
- }
- else if ( "1.0".equalsIgnoreCase( wtpversion ) ) //$NON-NLS-1$
- {
- wtpVersionFloat = 1.0f;
- }
- else if ( "1.5".equalsIgnoreCase( wtpversion ) ) //$NON-NLS-1$
- {
- wtpVersionFloat = 1.5f;
- }
- else if ( "2.0".equalsIgnoreCase( wtpversion ) ) //$NON-NLS-1$
- {
- wtpVersionFloat = 2.0f;
- }
- if ( !"none".equalsIgnoreCase( wtpversion ) )
- {
- getLog().info( Messages.getString( "EclipsePlugin.wtpversion", wtpversion ) );
- }
- }
-
- /**
- * Extension point for subclasses.
- * <p>
- * Called during <code>setup</code>.
- *
- * @throws MojoExecutionException mojo failures.
- */
- protected void setupExtras()
- throws MojoExecutionException
- {
- // extension point.
- }
-
- private void verifyClasspathContainerListIsComplete()
- {
- boolean containsJREContainer = false;
- // Check if classpathContainer contains a JRE (default, alternate or
- // Execution Environment)
- for ( Iterator iter = classpathContainers.iterator(); iter.hasNext(); )
- {
- Object classPathContainer = iter.next();
- if ( classPathContainer != null
- && classPathContainer.toString().startsWith( COMMON_PATH_JDT_LAUNCHING_JRE_CONTAINER ) )
- {
- containsJREContainer = true;
- break;
- }
- }
- if ( !containsJREContainer )
- {
- getLog().warn( Messages.getString( "EclipsePlugin.missingjrecontainer" ) ); //$NON-NLS-1$
- classpathContainers.add( 0, COMMON_PATH_JDT_LAUNCHING_JRE_CONTAINER );
- }
- }
-
- private boolean validate()
- throws MojoExecutionException
- {
- // validate sanity of the current m2 project
- if ( Arrays.binarySearch( WTP_SUPPORTED_VERSIONS, wtpversion ) < 0 )
- {
- throw new MojoExecutionException(
- Messages.getString( "EclipsePlugin.unsupportedwtp", new Object[] { //$NON-NLS-1$
- wtpversion,
- StringUtils.join( WTP_SUPPORTED_VERSIONS, " " ) } ) ); //$NON-NLS-1$
- }
-
- assertNotEmpty( executedProject.getGroupId(), POM_ELT_GROUP_ID );
- assertNotEmpty( executedProject.getArtifactId(), POM_ELT_ARTIFACT_ID );
-
- if ( executedProject.getFile() == null || !executedProject.getFile().exists() )
- {
- throw new MojoExecutionException( Messages.getString( "EclipsePlugin.missingpom" ) ); //$NON-NLS-1$
- }
-
- if ( "pom".equals( packaging ) && eclipseProjectDir == null ) //$NON-NLS-1$
- {
- getLog().info( Messages.getString( "EclipsePlugin.pompackaging" ) ); //$NON-NLS-1$
- return false;
- }
-
- if ( "eclipse-plugin".equals( packaging ) )
- {
- pde = true;
- }
-
- // [rfeng] Set PDE to false if the project is not a bundle
- if(!isOSGiBundle()) {
- pde = false;
- }
-
- if ( eclipseProjectDir == null )
- {
- eclipseProjectDir = executedProject.getFile().getParentFile();
- }
-
- if ( !eclipseProjectDir.exists() && !eclipseProjectDir.mkdirs() )
- {
- throw new MojoExecutionException( Messages.getString( "EclipsePlugin.cantcreatedir", eclipseProjectDir ) ); //$NON-NLS-1$
- }
-
- if ( !eclipseProjectDir.equals( executedProject.getFile().getParentFile() ) )
- {
- if ( !eclipseProjectDir.isDirectory() )
- {
- throw new MojoExecutionException( Messages.getString( "EclipsePlugin.notadir", eclipseProjectDir ) ); //$NON-NLS-1$
- }
- eclipseProjectDir = new File( eclipseProjectDir, executedProject.getArtifactId() );
- if ( !eclipseProjectDir.isDirectory() && !eclipseProjectDir.mkdirs() )
- {
- throw new MojoExecutionException( Messages.getString( "EclipsePlugin.cantcreatedir", eclipseProjectDir ) ); //$NON-NLS-1$
- }
- }
-
- validateExtras();
-
- return true;
- }
-
- /**
- * Extension point for subclasses.
- * <p>
- * Called during <code>setup</code> and used to validate that the configuration is sane.
- *
- * @throws MojoExecutionException mojo failures.
- */
- protected void validateExtras() throws MojoExecutionException
- {
- // provided for extension.
- }
-
- private void checkDeprecations()
- {
- if ( eclipseDownloadSources )
- {
- // deprecated warning
- getLog().warn( Messages.getString( "EclipsePlugin.deprecatedpar", new Object[] { //$NON-NLS-1$
- "eclipse.downloadSources", //$NON-NLS-1$
- "downloadSources" } ) ); //$NON-NLS-1$
- downloadSources = true;
- }
-
- checkDeprecationsExtras();
- }
-
- /**
- * Extension point for subclasses.
- * <p>
- * Check for any extra deprecations and log warnings. Called during <code>setup</code>
- */
- protected void checkDeprecationsExtras()
- {
- // provided for extension.
- }
-
- public final void writeConfiguration( IdeDependency[] deps )
- throws MojoExecutionException
- {
- EclipseWriterConfig config = createEclipseWriterConfig( deps );
-
- if ( wtpmanifest && isJavaProject() )
- {
- EclipseManifestWriter.addManifestResource( getLog(), config );
- }
- // NOTE: This could change the config!
- writeConfigurationExtras( config );
-
- if ( wtpVersionFloat == 0.7f )
- {
- new EclipseWtpmodulesWriter().init( getLog(), config ).write();
- }
-
- if ( wtpVersionFloat >= 1.0f )
- {
- new EclipseWtpFacetsWriter().init( getLog(), config ).write();
- }
- if ( wtpVersionFloat == 1.0f )
- {
- new EclipseWtpComponentWriter().init( getLog(), config ).write();
- }
- if ( wtpVersionFloat >= 1.5 )
- {
- new EclipseWtpComponent15Writer().init( getLog(), config ).write();
- }
-
- new EclipseSettingsWriter().init( getLog(), config ).write();
-
- if ( isJavaProject )
- {
- new EclipseClasspathWriter().init( getLog(), config ).write();
- if ( ajdt && ajdtVersion.equals( "1.4" ) )
- {
- new EclipseAjdtWriter().init( getLog(), config ).write();
- }
- }
-
- if ( wtpapplicationxml )
- {
- new EclipseWtpApplicationXMLWriter().init( getLog(), config ).write();
- }
-
- // [rfeng]
- /*
- if ( pde )
- {
- this.getLog().info( "The Maven Eclipse plugin runs in 'pde'-mode." );
- new EclipseOSGiManifestWriter().init( getLog(), config ).write();
- }
- */
- // [rfeng]
-
- // NOTE: This one MUST be after EclipseClasspathwriter, and possibly others,
- // since currently EclipseClasspathWriter does some magic to detect nested
- // output folders and modifies the configuration by adding new (Ant) builders.
- // So the .project file must be written AFTER those have run!
- new EclipseProjectWriter().init( getLog(), config ).write();
-
- writeAdditionalConfig();
-
- getLog().info( Messages.getString( "EclipsePlugin.wrote", new Object[] { //$NON-NLS-1$
- config.getEclipseProjectName(), eclipseProjectDir.getAbsolutePath() } ) );
- }
-
- private void writeAdditionalConfig()
- throws MojoExecutionException
- {
- if ( additionalConfig != null )
- {
- for ( int j = 0; j < additionalConfig.length; j++ )
- {
- EclipseConfigFile file = additionalConfig[j];
- File projectRelativeFile = new File( eclipseProjectDir, file.getName() );
- if ( projectRelativeFile.isDirectory() )
- {
- // just ignore?
- getLog().warn( Messages.getString( "EclipsePlugin.foundadir", //$NON-NLS-1$
- projectRelativeFile.getAbsolutePath() ) );
- }
-
- try
- {
- projectRelativeFile.getParentFile().mkdirs();
- if ( file.getContent() == null )
- {
- InputStream inStream;
- if ( file.getLocation() != null )
- {
- inStream = locator.getResourceAsInputStream( file.getLocation() );
- }
- else
- {
- inStream = file.getURL().openConnection().getInputStream();
- }
- OutputStream outStream = new FileOutputStream( projectRelativeFile );
- try
- {
- IOUtil.copy( inStream, outStream );
- }
- finally
- {
- inStream.close();
- outStream.close();
- }
- }
- else
- {
- FileUtils.fileWrite( projectRelativeFile.getAbsolutePath(), file.getContent() );
- }
- }
- catch ( IOException e )
- {
- throw new MojoExecutionException( Messages.getString( "EclipsePlugin.cantwritetofile", //$NON-NLS-1$
- projectRelativeFile.getAbsolutePath() ) );
- }
- catch ( ResourceNotFoundException e )
- {
- throw new MojoExecutionException( Messages.getString( "EclipsePlugin.cantfindresource", //$NON-NLS-1$
- file.getLocation() ) );
- }
-
- }
- }
- }
-
- /**
- * Create the <code>EclipseWriterConfig</code> for the specified dependencies.
- *
- * @param deps the project dependencies
- * @return a configured <code>EclipseWriterConfig</code>
- * @throws MojoExecutionException mojo failures.
- */
- protected final EclipseWriterConfig createEclipseWriterConfig( IdeDependency[] deps )
- throws MojoExecutionException
- {
- File projectBaseDir = executedProject.getFile().getParentFile();
-
- // build a list of UNIQUE source dirs (both src and resources) to be
- // used in classpath and wtpmodules
- EclipseSourceDir[] sourceDirs = buildDirectoryList( executedProject, eclipseProjectDir, buildOutputDirectory );
-
- EclipseWriterConfig config = new EclipseWriterConfig();
-
- config.setWorkspaceConfiguration( getWorkspaceConfiguration() );
-
- config.setProjectNameTemplate( getProjectNameTemplate() );
-
- String projectName = IdeUtils.getProjectName( config.getProjectNameTemplate(), project );
-
- config.setEclipseProjectName( projectName );
-
- config.setWtpapplicationxml( wtpapplicationxml );
-
- config.setWtpVersion( wtpVersionFloat );
-
- float ajdtVersionFloat;
- try
- {
- ajdtVersionFloat = Float.parseFloat( ajdtVersion );
- }
- catch ( NumberFormatException e )
- {
- ajdtVersionFloat = 0.0f;
- }
-
- config.setAjdtVersion( ajdtVersionFloat );
-
- Set convertedBuildCommands = new LinkedHashSet();
-
- if ( buildcommands != null )
- {
- for ( Iterator it = buildcommands.iterator(); it.hasNext(); )
- {
- Object cmd = it.next();
-
- if ( cmd instanceof BuildCommand )
- {
- convertedBuildCommands.add( cmd );
- }
- else
- {
- convertedBuildCommands.add( new BuildCommand( (String) cmd ) );
- }
- }
- }
-
- if ( ajdt )
- {
- buildAjdtWeaveDeps( deps );
- buildAspectjDeps( deps );
- }
-
- config.setBuildCommands( new LinkedList( convertedBuildCommands ) );
-
- config.setBuildOutputDirectory( buildOutputDirectory );
- config.setClasspathContainers( classpathContainers );
- config.setDeps( deps );
- config.setEclipseProjectDirectory( eclipseProjectDir );
- config.setLocalRepository( localRepository );
- config.setOSGIManifestFile( manifest );
- config.setPde( pde );
- config.setProject( project );
- config.setProjectBaseDir( projectBaseDir );
- config.setProjectnatures( projectnatures );
- config.setProjectFacets( additionalProjectFacets );
- config.setSourceDirs( sourceDirs );
- config.setAddVersionToProjectName( isAddVersionToProjectName() );
- config.setPackaging( packaging );
-
- collectWarContextRootsFromReactorEarConfiguration( config );
-
- return config;
- }
-
- /**
- * If this is a war module peek into the reactor an search for an ear module that defines the context root of this
- * module.
- *
- * @param config config to save the context root.
- */
- private void collectWarContextRootsFromReactorEarConfiguration( EclipseWriterConfig config )
- {
- if ( reactorProjects != null && wtpContextName == null
- && Constants.PROJECT_PACKAGING_WAR.equals( project.getPackaging() ) )
- {
- for ( Iterator iter = reactorProjects.iterator(); iter.hasNext(); )
- {
- MavenProject reactorProject = (MavenProject) iter.next();
-
- if ( Constants.PROJECT_PACKAGING_EAR.equals( reactorProject.getPackaging() ) )
- {
- Xpp3Dom[] warDefinitions =
- IdeUtils.getPluginConfigurationDom( reactorProject, JeeUtils.ARTIFACT_MAVEN_EAR_PLUGIN,
- new String[] { "modules", "webModule" } );
- for ( int index = 0; index < warDefinitions.length; index++ )
- {
- Xpp3Dom groupId = warDefinitions[index].getChild( "groupId" );
- Xpp3Dom artifactId = warDefinitions[index].getChild( "artifactId" );
- Xpp3Dom contextRoot = warDefinitions[index].getChild( "contextRoot" );
- if ( groupId != null && artifactId != null && contextRoot != null && groupId.getValue() != null
- && artifactId.getValue() != null && contextRoot.getValue() != null )
- {
- getLog().info(
- "Found context root definition for " + groupId.getValue() + ":"
- + artifactId.getValue() + " " + contextRoot.getValue() );
- if ( project.getArtifactId().equals( artifactId.getValue() )
- && project.getGroupId().equals( groupId.getValue() ) )
- {
- config.setContextName( contextRoot.getValue() );
- }
- }
- else
- {
- getLog().info(
- "Found incomplete ear configuration in " + reactorProject.getGroupId() + ":"
- + reactorProject.getGroupId() + " found "
- + warDefinitions[index].toString() );
- }
- }
- }
- }
- }
- if ( config.getContextName() == null && Constants.PROJECT_PACKAGING_WAR.equals( project.getPackaging() ) )
- {
- if ( wtpContextName == null )
- {
- config.setContextName( project.getArtifactId() );
- }
- else
- {
- config.setContextName( wtpContextName );
- }
- }
- }
-
- /**
- * Write any extra configuration information for the Eclipse project. This is an extension point, called before the
- * main configurations are written. <br/> <b> NOTE: This could change the config! </b>
- *
- * @param config
- * @throws MojoExecutionException
- */
- protected void writeConfigurationExtras( EclipseWriterConfig config )
- throws MojoExecutionException
- {
- // extension point.
- }
-
- private void assertNotEmpty( String string, String elementName )
- throws MojoExecutionException
- {
- if ( string == null )
- {
- throw new MojoExecutionException( Messages.getString( "EclipsePlugin.missingelement", elementName ) ); //$NON-NLS-1$
- }
- }
-
- /**
- * Fill getProjectnatures() with values.
- * <p>
- * Subclasses should call super and then calculate their own additions and insert them via
- * <code>getProjectnatures().addAll()</code>.
- *
- * @param packaging the pom's packaging
- */
- protected void fillDefaultNatures( String packaging )
- {
- projectnatures = new ArrayList();
-
- if ( wtpVersionFloat >= 1.0f )
- {
- projectnatures.add( NATURE_WST_FACET_CORE_NATURE ); // WTP 1.0 nature
- }
-
- if ( isJavaProject )
- {
- if ( ajdt )
- {
- projectnatures.add( NATURE_AJDT_CORE_JAVA );
- }
-
- projectnatures.add( NATURE_JDT_CORE_JAVA );
- }
-
- if ( wtpVersionFloat >= 0.7f )
- {
- projectnatures.add( NATURE_WST_MODULE_CORE_NATURE ); // WTP 0.7/1.0 nature
-
- if ( isJavaProject )
- {
- projectnatures.add( NATURE_JEM_WORKBENCH_JAVA_EMF ); // WTP 0.7/1.0 nature
- }
- }
-
- if ( pde )
- {
- projectnatures.add( NATURE_PDE_PLUGIN );
- }
-
- }
-
- /**
- * Fill getClasspathContainers() with values.
- * <p>
- * Subclasses should call super and then calculate their own additions and insert them via
- * <code>getClasspathContainers().addAll()</code>.
- *
- * @param packaging the pom's packaging
- */
- protected void fillDefaultClasspathContainers( String packaging )
- {
- classpathContainers = new ArrayList();
-
- if ( getWorkspaceConfiguration().getDefaultClasspathContainer() != null )
- {
- getLog().info(
- "Adding default classpath container: "
- + getWorkspaceConfiguration().getDefaultClasspathContainer() );
- classpathContainers.add( getWorkspaceConfiguration().getDefaultClasspathContainer() );
- }
- if ( pde )
- {
- classpathContainers.add( REQUIRED_PLUGINS_CONTAINER );
- }
-
- if ( ajdt )
- {
- classpathContainers.add( ASPECTJ_RT_CONTAINER );
- }
- }
-
- /**
- * Fill getBuildcommands() with values.
- * <p>
- * Subclasses should call super and then calculate their own additions and insert them via
- * <code>getBuildcommands().addAll()</code>.
- *
- * @param packaging the pom's packaging
- */
- protected void fillDefaultBuilders( String packaging )
- {
- buildcommands = new ArrayList();
-
- if ( wtpVersionFloat == 0.7f )
- {
- buildcommands.add( new BuildCommand( BUILDER_WST_COMPONENT_STRUCTURAL ) ); // WTP 0.7 builder
- }
-
- if ( isJavaProject )
- {
- if ( ajdt )
- {
- buildcommands.add( new BuildCommand( BUILDER_AJDT_CORE_JAVA ) );
- }
- else
- {
- buildcommands.add( new BuildCommand( BUILDER_JDT_CORE_JAVA ) );
- }
- }
-
- if ( wtpVersionFloat >= 1.5f )
- {
- buildcommands.add( new BuildCommand( BUILDER_WST_FACET ) ); // WTP 1.5 builder
- }
-
- if ( wtpVersionFloat >= 0.7f )
- {
- buildcommands.add( new BuildCommand( BUILDER_WST_VALIDATION ) ); // WTP 0.7/1.0 builder
- }
-
- if ( wtpVersionFloat == 0.7f )
- {
- // WTP 0.7 builder
- buildcommands.add( new BuildCommand( BUILDER_WST_COMPONENT_STRUCTURAL_DEPENDENCY_RESOLVER ) );
- }
-
- if ( pde )
- {
- buildcommands.add( new BuildCommand( BUILDER_PDE_MANIFEST ) );
- buildcommands.add( new BuildCommand( BUILDER_PDE_SCHEMA ) );
- }
- }
-
- public final EclipseSourceDir[] buildDirectoryList( MavenProject project, File basedir, File buildOutputDirectory )
- throws MojoExecutionException
- {
- File projectBaseDir = project.getFile().getParentFile();
-
- String mainOutput = IdeUtils.toRelativeAndFixSeparator( projectBaseDir, buildOutputDirectory, false );
-
- // If using the standard output location, don't mix the test output into it.
- String testOutput = null;
- boolean useStandardOutputDir =
- buildOutputDirectory.equals( new File( project.getBuild().getOutputDirectory() ) );
- if ( useStandardOutputDir )
- {
- getLog().debug(
- "testOutput toRelativeAndFixSeparator " + projectBaseDir + " , "
- + project.getBuild().getTestOutputDirectory() );
- testOutput =
- IdeUtils.toRelativeAndFixSeparator( projectBaseDir,
- new File( project.getBuild().getTestOutputDirectory() ), false );
- getLog().debug( "testOutput after toRelative : " + testOutput );
- }
-
- Set mainDirectories = new LinkedHashSet();
-
- extractSourceDirs( mainDirectories, project.getCompileSourceRoots(), basedir, projectBaseDir, false, null );
-
- extractResourceDirs( mainDirectories, project.getBuild().getResources(), basedir, projectBaseDir, false,
- mainOutput );
-
- Set testDirectories = new LinkedHashSet();
-
- extractSourceDirs( testDirectories, project.getTestCompileSourceRoots(), basedir, projectBaseDir, true,
- testOutput );
-
- extractResourceDirs( testDirectories, project.getBuild().getTestResources(), basedir, projectBaseDir, true,
- testOutput );
-
- // avoid duplicated entries
- Set directories = new LinkedHashSet();
-
- // NOTE: Since MNG-3118, test classes come before main classes
- boolean testBeforeMain = isMavenVersion( "[2.0.8,)" );
-
- if ( testBeforeMain )
- {
- directories.addAll( testDirectories );
- directories.removeAll( mainDirectories );
- directories.addAll( mainDirectories );
- }
- else
- {
- directories.addAll( mainDirectories );
- directories.addAll( testDirectories );
- }
- if ( ajdt )
- extractAspectDirs( directories, project, basedir, projectBaseDir, testOutput );
- return (EclipseSourceDir[]) directories.toArray( new EclipseSourceDir[directories.size()] );
- }
-
- private void extractSourceDirs( Set directories, List sourceRoots, File basedir, File projectBaseDir, boolean test,
- String output )
- throws MojoExecutionException
- {
- for ( Iterator it = sourceRoots.iterator(); it.hasNext(); )
- {
-
- File sourceRootFile = new File( (String) it.next() );
-
- if ( sourceRootFile.isDirectory() )
- {
- String sourceRoot =
- IdeUtils.toRelativeAndFixSeparator( projectBaseDir, sourceRootFile,
- !projectBaseDir.equals( basedir ) );
-
- directories.add( new EclipseSourceDir( sourceRoot, output, false, test, null, null, false ) );
- }
- }
- }
-
- final void extractResourceDirs( Set directories, List resources, File basedir, File workspaceProjectBaseDir,
- boolean test, final String output )
- throws MojoExecutionException
- {
- for ( Iterator it = resources.iterator(); it.hasNext(); )
- {
- Resource resource = (Resource) it.next();
-
- getLog().debug( "Processing resource dir: " + resource.getDirectory() );
-
- String includePattern = null;
- String excludePattern = null;
-
- if ( resource.getIncludes().size() != 0 )
- {
- includePattern = StringUtils.join( resource.getIncludes().iterator(), "|" );
- }
-
- if ( resource.getExcludes().size() != 0 )
- {
- excludePattern = StringUtils.join( resource.getExcludes().iterator(), "|" );
- }
-
- // TODO: figure out how to merge if the same dir is specified twice
- // with different in/exclude patterns.
-
- File resourceDirectory = new File( /* basedir, */resource.getDirectory() );
-
- if ( !resourceDirectory.exists() || !resourceDirectory.isDirectory() )
- {
- getLog().debug( "Resource dir: " + resourceDirectory + " either missing or not a directory." );
- continue;
- }
-
- String resourceDir =
- IdeUtils.toRelativeAndFixSeparator( workspaceProjectBaseDir, resourceDirectory,
- !workspaceProjectBaseDir.equals( basedir ) );
- String thisOutput = output;
- if ( thisOutput != null )
- {
- // sometimes thisOutput is already an absolute path
- File outputFile = new File( thisOutput );
- if ( !outputFile.isAbsolute() )
- {
- outputFile = new File( workspaceProjectBaseDir, thisOutput );
- }
- // create output dir if it doesn't exist
- outputFile.mkdirs();
-
- if ( !StringUtils.isEmpty( resource.getTargetPath() ) )
- {
- outputFile = new File( outputFile, resource.getTargetPath() );
- // create output dir if it doesn't exist
- outputFile.mkdirs();
- }
-
- getLog().debug(
- "Making relative and fixing separator: { " + workspaceProjectBaseDir + ", "
- + outputFile + ", false }." );
- thisOutput = IdeUtils.toRelativeAndFixSeparator( workspaceProjectBaseDir, outputFile, false );
- }
-
- getLog().debug(
- "Adding eclipse source dir: { " + resourceDir + ", " + thisOutput + ", true, " + test
- + ", " + includePattern + ", " + excludePattern + " }." );
-
- directories.add( new EclipseSourceDir( resourceDir, thisOutput, true, test, includePattern, excludePattern,
- resource.isFiltering() ) );
- }
- }
-
- private void extractAspectDirs( Set directories, MavenProject project, File basedir, File projectBaseDir,
- String testOutput )
- throws MojoExecutionException
- {
- Xpp3Dom configuration = getAspectjConfiguration( project );
- if ( configuration != null )
- {
- String aspectDirectory = DEFAULT_ASPECT_DIRECTORY;
- Xpp3Dom aspectDirectoryElement = configuration.getChild( ASPECT_DIRECTORY );
- if ( aspectDirectoryElement != null )
- {
- aspectDirectory = aspectDirectoryElement.getValue();
- }
-
- File aspectDirectoryFile = new File( basedir, aspectDirectory );
- if ( aspectDirectoryFile.exists() && aspectDirectoryFile.isDirectory() )
- {
- String sourceRoot =
- IdeUtils.toRelativeAndFixSeparator( projectBaseDir, aspectDirectoryFile,
- !projectBaseDir.equals( basedir ) );
-
- directories.add( new EclipseSourceDir( sourceRoot, null, false, false, null, null, false ) );
- }
-
- String testAspectDirectory = DEFAULT_TEST_ASPECT_DIRECTORY;
- Xpp3Dom testAspectDirectoryElement = configuration.getChild( TEST_ASPECT_DIRECTORY );
- if ( testAspectDirectoryElement != null )
- {
- testAspectDirectory = testAspectDirectoryElement.getValue();
- }
-
- File testAspectDirectoryFile = new File( basedir, testAspectDirectory );
- if ( testAspectDirectoryFile.exists() && testAspectDirectoryFile.isDirectory() )
- {
- String sourceRoot =
- IdeUtils.toRelativeAndFixSeparator( projectBaseDir, testAspectDirectoryFile,
- !projectBaseDir.equals( basedir ) );
-
- directories.add( new EclipseSourceDir( sourceRoot, testOutput, false, true, null, null, false ) );
- }
- }
- }
-
- private boolean enableAjdt( MavenProject project )
- {
- boolean enable = false;
- List buildPlugins = project.getBuildPlugins();
- for ( Iterator it = buildPlugins.iterator(); it.hasNext(); )
- {
- Plugin plugin = (Plugin) it.next();
- if ( plugin.getGroupId().equals( ORG_CODEHAUS_MOJO )
- && plugin.getArtifactId().equals( ASPECTJ_MAVEN_PLUGIN ) )
- {
- enable = true;
- break;
- }
- }
-
- return enable;
- }
-
- private Xpp3Dom getAspectjConfiguration( MavenProject project )
- {
- Xpp3Dom configuration = null;
- List buildPlugins = project.getBuildPlugins();
- for ( Iterator it = buildPlugins.iterator(); it.hasNext(); )
- {
- Plugin plugin = (Plugin) it.next();
- if ( plugin.getGroupId().equals( ORG_CODEHAUS_MOJO )
- && plugin.getArtifactId().equals( ASPECTJ_MAVEN_PLUGIN ) )
- {
- configuration = (Xpp3Dom) plugin.getConfiguration();
- break;
- }
- }
-
- return configuration;
- }
-
- private void buildAspectjDeps( IdeDependency[] deps )
- throws MojoExecutionException
- {
- Xpp3Dom configuration = getAspectjConfiguration( executedProject );
- if ( configuration != null )
- {
- Xpp3Dom aspectLibrariesParent = configuration.getChild( ASPECT_LIBRARIES );
- if ( aspectLibrariesParent != null )
- {
- Xpp3Dom[] aspectLibraries = aspectLibrariesParent.getChildren( ASPECT_LIBRARY );
- outerLoop: for ( int i = 0; i < aspectLibraries.length; i++ )
- {
- String artifactId = aspectLibraries[i].getChild( POM_ELT_ARTIFACT_ID ).getValue();
- String groupId = aspectLibraries[i].getChild( POM_ELT_GROUP_ID ).getValue();
- for ( int j = 0; j < deps.length; j++ )
- {
- if ( deps[j].getArtifactId().equals( artifactId ) && deps[j].getGroupId().equals( groupId ) )
- {
- deps[j].setAjdtDependency( true );
- continue outerLoop;
- }
- }
-
- throw new MojoExecutionException( "AspectLibrary is not a dependency of project" );
- }
- }
- }
- }
-
- private void buildAjdtWeaveDeps( IdeDependency[] deps )
- throws MojoExecutionException
- {
- Xpp3Dom configuration = getAspectjConfiguration( executedProject );
- if ( configuration != null )
- {
- Xpp3Dom weaveDependenciesParent = configuration.getChild( WEAVE_DEPENDENCIES );
- if ( weaveDependenciesParent != null )
- {
- Xpp3Dom[] weaveDependencies = weaveDependenciesParent.getChildren( WEAVE_DEPENDENCY );
- outerLoop: for ( int i = 0; i < weaveDependencies.length; i++ )
- {
- String artifactId = weaveDependencies[i].getChild( POM_ELT_ARTIFACT_ID ).getValue();
- String groupId = weaveDependencies[i].getChild( POM_ELT_GROUP_ID ).getValue();
- for ( int j = 0; j < deps.length; j++ )
- {
- if ( deps[j].getArtifactId().equals( artifactId ) && deps[j].getGroupId().equals( groupId ) )
- {
- deps[j].setAjdtWeaveDependency( true );
- continue outerLoop;
- }
- }
-
- throw new MojoExecutionException( "WeaveDependency is not a dependency of project" );
- }
- }
- }
- }
-
- /**
- * {@inheritDoc}
- */
- public String getProjectNameForArifact( Artifact artifact )
- {
- IdeDependency[] workspaceArtefacts = getWorkspaceArtefacts();
- for ( int index = 0; workspaceArtefacts != null && index < workspaceArtefacts.length; index++ )
- {
- IdeDependency workspaceArtefact = workspaceArtefacts[index];
- if ( workspaceArtefact.isAddedToClasspath()
- && workspaceArtefact.getGroupId().equals( artifact.getGroupId() )
- && workspaceArtefact.getArtifactId().equals( artifact.getArtifactId() ) )
- {
- if ( workspaceArtefact.getVersion().equals( artifact.getVersion() ) )
- {
- return workspaceArtefact.getEclipseProjectName();
- }
- }
- }
- MavenProject reactorProject = getReactorProject( artifact );
- if ( reactorProject != null ) {
- return IdeUtils.getProjectName( getProjectNameTemplateForMavenProject( reactorProject ), artifact );
- }
- return IdeUtils.getProjectName( getProjectNameTemplate(), artifact );
- }
-
- /**
- * @param mavenProject the project to get the projectNameTemplate configuration from
- * @return the projectNameTemplate configuration from the specified MavenProject
- */
- private String getProjectNameTemplateForMavenProject( MavenProject mavenProject )
- {
- String projectNameTemplate = null;
- boolean addVersionToProjectName = false;
- boolean addGroupIdToProjectName = false;
-
- Build build = mavenProject.getBuild();
- if ( build != null )
- {
- Plugin plugin = (Plugin) build.getPluginsAsMap().get( "org.apache.maven.plugins:maven-eclipse-plugin" );
- if ( plugin != null )
- {
- Xpp3Dom config = (Xpp3Dom) plugin.getConfiguration();
- if ( config != null )
- {
- Xpp3Dom projectNameTemplateNode = config.getChild( "projectNameTemplate" );
- if ( projectNameTemplateNode != null )
- {
- projectNameTemplate = projectNameTemplateNode.getValue();
- }
- Xpp3Dom addVersionToProjectNameNode = config.getChild( "addVersionToProjectName" );
- addVersionToProjectName = addVersionToProjectNameNode != null;
- Xpp3Dom addGroupIdToProjectNameNode = config.getChild( "addGroupIdToProjectName" );
- addGroupIdToProjectName = addGroupIdToProjectNameNode != null;
- }
- }
- }
- return IdeUtils.calculateProjectNameTemplate(projectNameTemplate, addVersionToProjectName, addGroupIdToProjectName, getLog());
- }
-
- /**
- * {@inheritDoc}
- */
- protected final IdeDependency[] getWorkspaceArtefacts()
- {
- return getWorkspaceConfiguration().getWorkspaceArtefacts();
- }
-
- public final WorkspaceConfiguration getWorkspaceConfiguration()
- {
- if ( workspaceConfiguration == null )
- {
- workspaceConfiguration = new WorkspaceConfiguration();
- locateWorkspace();
- getLog().info( Messages.getString( "EclipsePlugin.workspace", workspace ) );
- workspaceConfiguration.setWorkspaceDirectory( workspace );
-
- new ReadWorkspaceLocations().init( getLog(), workspaceConfiguration, project, wtpdefaultserver );
- }
- return workspaceConfiguration;
- }
-
- /**
- * If workspace is not defined, then attempt to locate it by checking up the directory hierarchy.
- */
- private void locateWorkspace()
- {
- if ( workspace == null )
- {
- File currentWorkingDirectory = new File( "." ).getAbsoluteFile();
- while ( currentWorkingDirectory != null )
- {
- File metadataDirectory = new File( currentWorkingDirectory, ".metadata" );
- logger.debug( "Checking for eclipse workspace at " + currentWorkingDirectory );
- if ( metadataDirectory.exists() && metadataDirectory.isDirectory() )
- {
- logger.debug( " Found workspace at " + currentWorkingDirectory );
- workspace = currentWorkingDirectory;
- return;
- }
- currentWorkingDirectory = currentWorkingDirectory.getParentFile();
- }
- }
- }
-
- public final List getExcludes()
- {
- return excludes;
- }
-
- /**
- * Utility method that locates a project in the workspace for the given artifact.
- *
- * @param artifact the artifact a project should produce.
- * @return <code>true</code> if the artifact is produced by a reactor projectart.
- */
- private boolean isAvailableAsAWorkspaceProject( Artifact artifact )
- {
- IdeDependency[] workspaceArtefacts = getWorkspaceArtefacts();
- for ( int index = 0; workspaceArtefacts != null && index < workspaceArtefacts.length; index++ )
- {
- IdeDependency workspaceArtefact = workspaceArtefacts[index];
- if ( workspaceArtefact.getGroupId().equals( artifact.getGroupId() )
- && workspaceArtefact.getArtifactId().equals( artifact.getArtifactId() ) )
- {
- if ( workspaceArtefact.getVersion().equals( artifact.getVersion() ) )
- {
- workspaceArtefact.setAddedToClasspath( true );
- getLog().debug( "Using workspace project: " + workspaceArtefact.getEclipseProjectName() );
- return true;
- }
- else
- {
- getLog().info(
- "Artifact "
- + artifact.getId()
- + " already available as a workspace project, but with different version. Expected: "
- + artifact.getVersion() + ", found: " + workspaceArtefact.getVersion() );
- }
- }
- }
- return false;
- }
-
- /**
- * Checks if jar has to be resolved for the given artifact
- *
- * @param art the artifact to check
- * @return true if resolution should happen
- */
- protected final boolean hasToResolveJar( Artifact art )
- {
- return !( getUseProjectReferences() && isAvailableAsAReactorProject( art ) )
- || ( limitProjectReferencesToWorkspace && !( getUseProjectReferences() && isAvailableAsAWorkspaceProject( art ) ) );
- }
-
- /**
- * Checks if a projects reference has to be used for the given artifact
- *
- * @param art the artifact to check
- * @return true if a project reference has to be used.
- */
- protected final boolean useProjectReference( Artifact art )
- {
- boolean isReactorProject = getUseProjectReferences() && isAvailableAsAReactorProject( art );
- boolean isWorkspaceProject = getUseProjectReferences() && isAvailableAsAWorkspaceProject( art );
- return ( isReactorProject && !limitProjectReferencesToWorkspace ) || // default
- ( limitProjectReferencesToWorkspace && isWorkspaceProject ) || // limitProjectReferencesToWorkspace
- ( !isReactorProject && isWorkspaceProject ); // default + workspace projects
- }
-}