diff options
Diffstat (limited to 'maven-plugins/tags/tuscany-bundle-plugin-1.0.8/src/main/java/org/apache/tuscany/maven/plugin')
6 files changed, 0 insertions, 4295 deletions
diff --git a/maven-plugins/tags/tuscany-bundle-plugin-1.0.8/src/main/java/org/apache/tuscany/maven/plugin/eclipse/AbstractIdeSupportMojo.java b/maven-plugins/tags/tuscany-bundle-plugin-1.0.8/src/main/java/org/apache/tuscany/maven/plugin/eclipse/AbstractIdeSupportMojo.java deleted file mode 100644 index 6fc8295a4e..0000000000 --- a/maven-plugins/tags/tuscany-bundle-plugin-1.0.8/src/main/java/org/apache/tuscany/maven/plugin/eclipse/AbstractIdeSupportMojo.java +++ /dev/null @@ -1,1150 +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.FileInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.TreeSet; -import java.util.jar.Manifest; - -import org.apache.maven.artifact.Artifact; -import org.apache.maven.artifact.factory.ArtifactFactory; -import org.apache.maven.artifact.metadata.ArtifactMetadataSource; -import org.apache.maven.artifact.repository.ArtifactRepository; -import org.apache.maven.artifact.resolver.ArtifactCollector; -import org.apache.maven.artifact.resolver.ArtifactNotFoundException; -import org.apache.maven.artifact.resolver.ArtifactResolutionException; -import org.apache.maven.artifact.resolver.ArtifactResolutionResult; -import org.apache.maven.artifact.resolver.ArtifactResolver; -import org.apache.maven.artifact.resolver.DebugResolutionListener; -import org.apache.maven.artifact.resolver.ResolutionNode; -import org.apache.maven.artifact.resolver.WarningResolutionListener; -import org.apache.maven.artifact.resolver.filter.ArtifactFilter; -import org.apache.maven.artifact.resolver.filter.ExcludesArtifactFilter; -import org.apache.maven.artifact.versioning.ArtifactVersion; -import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException; -import org.apache.maven.artifact.versioning.VersionRange; -import org.apache.maven.execution.RuntimeInformation; -import org.apache.maven.model.Dependency; -import org.apache.maven.model.DependencyManagement; -import org.apache.maven.model.Exclusion; -import org.apache.maven.plugin.AbstractMojo; -import org.apache.maven.plugin.MojoExecutionException; -import org.apache.maven.plugin.MojoFailureException; -import org.apache.maven.plugin.eclipse.Constants; -import org.apache.maven.plugin.eclipse.Messages; -import org.apache.maven.plugin.ide.IdeDependency; -import org.apache.maven.plugin.ide.IdeUtils; -import org.apache.maven.project.MavenProject; -import org.apache.tuscany.maven.bundle.plugin.BundleUtil; -import org.codehaus.plexus.logging.LogEnabled; -import org.codehaus.plexus.logging.Logger; - -/** - * Abstract base plugin which takes care of the common stuff usually needed by maven IDE plugins. A plugin extending - * AbstractIdeSupportMojo should implement the <code>setup()</code> and <code>writeConfiguration()</code> methods, plus - * the getters needed to get the various configuration flags and required components. The lifecycle: - * - * <pre> - * *** calls setup() where you can configure your specific stuff and stop the mojo from execute if appropriate *** - * - manually resolve project dependencies, NOT failing if a dependency is missing - * - compute project references (reactor projects) if the getUseProjectReferences() flag is set - * - download sources/javadocs if the getDownloadSources() flag is set - * *** calls writeConfiguration(), passing the list of resolved referenced dependencies *** - * - report the list of missing sources or just tell how to turn this feature on if the flag was disabled - * </pre> - * - * @author Fabrizio Giustina - * @version $Id: AbstractIdeSupportMojo.java 727620 2008-12-18 02:35:18Z baerrach $ - */ -public abstract class AbstractIdeSupportMojo - extends AbstractMojo - implements LogEnabled -{ - /** - * Is it an PDE project? If yes, the plugin adds the necessary natures and build commands to the .project file. - * Additionally it copies all libraries to a project local directory and references them instead of referencing the - * files in the local Maven repository. It also ensured that the "Bundle-Classpath" in META-INF/MANIFEST.MF is - * synchronized. - * - * @parameter expression="${eclipse.pde}" default-value="true" - */ - protected boolean pde; - - /** - * The project whose project files to create. - * - * @parameter expression="${project}" - * @required - * @readonly - */ - protected MavenProject project; - - /** - * The currently executed project (can be a reactor project). - * - * @parameter expression="${executedProject}" - * @readonly - */ - protected MavenProject executedProject; - - /** - * The project packaging. - * - * @parameter expression="${project.packaging}" - */ - protected String packaging; - - /** - * Artifact factory, needed to download source jars for inclusion in classpath. - * - * @component role="org.apache.maven.artifact.factory.ArtifactFactory" - * @required - * @readonly - */ - protected ArtifactFactory artifactFactory; - - /** - * Artifact resolver, needed to download source jars for inclusion in classpath. - * - * @component role="org.apache.maven.artifact.resolver.ArtifactResolver" - * @required - * @readonly - */ - protected ArtifactResolver artifactResolver; - - /** - * Artifact collector, needed to resolve dependencies. - * - * @component role="org.apache.maven.artifact.resolver.ArtifactCollector" - * @required - * @readonly - */ - protected ArtifactCollector artifactCollector; - - /** - * @component role="org.apache.maven.artifact.metadata.ArtifactMetadataSource" hint="maven" - */ - protected ArtifactMetadataSource artifactMetadataSource; - - /** - * The runtime information for Maven, used to retrieve Maven's version number. - * - * @component - */ - private RuntimeInformation runtimeInformation; - - /** - * Remote repositories which will be searched for source attachments. - * - * @parameter expression="${project.remoteArtifactRepositories}" - * @required - * @readonly - */ - protected List remoteArtifactRepositories; - - /** - * Local maven repository. - * - * @parameter expression="${localRepository}" - * @required - * @readonly - */ - protected ArtifactRepository localRepository; - - /** - * If the executed project is a reactor project, this will contains the full list of projects in the reactor. - * - * @parameter expression="${reactorProjects}" - * @required - * @readonly - */ - protected List reactorProjects; - - /** - * Skip the operation when true. - * - * @parameter expression="${eclipse.skip}" default-value="false" - */ - private boolean skip; - - /** - * Enables/disables the downloading of source attachments. Defaults to false. When this flag is <code>true</code> - * remote repositories are checked for sources: in order to avoid repeated check for unavailable source archives, a - * status cache is mantained. To reset this cache run <code>mvn eclipse:remove-cache</code>, or use the - * <code>forceRecheck</code> option. - * - * @parameter expression="${downloadSources}" - */ - protected boolean downloadSources; - - /** - * Enables/disables the downloading of javadoc attachments. Defaults to false. When this flag is <code>true</code> - * remote repositories are checked for javadocs: in order to avoid repeated check for unavailable javadoc archives, - * a status cache is mantained. To reset this cache run <code>mvn eclipse:remove-cache</code>, or use the - * <code>forceRecheck</code> option. - * - * @parameter expression="${downloadJavadocs}" - */ - protected boolean downloadJavadocs; - - /** - * Enables/disables the rechecking of the remote repository for downloading source/javadoc attachments. Defaults to - * false. When this flag is <code>true</code> and the source or javadoc attachment has a status cache to indicate - * that it is not available, then the remote repository will be rechecked for a source or javadoc attachment and the - * status cache updated to reflect the new state. - * - * @parameter expression="${forceRecheck}" - */ - protected boolean forceRecheck; - - /** - * Plexus logger needed for debugging manual artifact resolution. - */ - protected Logger logger; - - /** - * Getter for <code>artifactMetadataSource</code>. - * - * @return Returns the artifactMetadataSource. - */ - public ArtifactMetadataSource getArtifactMetadataSource() - { - return artifactMetadataSource; - } - - /** - * Setter for <code>artifactMetadataSource</code>. - * - * @param artifactMetadataSource The artifactMetadataSource to set. - */ - public void setArtifactMetadataSource( ArtifactMetadataSource artifactMetadataSource ) - { - this.artifactMetadataSource = artifactMetadataSource; - } - - /** - * Getter for <code>project</code>. - * - * @return Returns the project. - */ - public MavenProject getProject() - { - return project; - } - - /** - * Setter for <code>project</code>. - * - * @param project The project to set. - */ - public void setProject( MavenProject project ) - { - this.project = project; - } - - /** - * Getter for <code>reactorProjects</code>. - * - * @return Returns the reactorProjects. - */ - public List getReactorProjects() - { - return reactorProjects; - } - - /** - * Setter for <code>reactorProjects</code>. - * - * @param reactorProjects The reactorProjects to set. - */ - public void setReactorProjects( List reactorProjects ) - { - this.reactorProjects = reactorProjects; - } - - /** - * Getter for <code>remoteArtifactRepositories</code>. - * - * @return Returns the remoteArtifactRepositories. - */ - public List getRemoteArtifactRepositories() - { - return remoteArtifactRepositories; - } - - /** - * Setter for <code>remoteArtifactRepositories</code>. - * - * @param remoteArtifactRepositories The remoteArtifactRepositories to set. - */ - public void setRemoteArtifactRepositories( List remoteArtifactRepositories ) - { - this.remoteArtifactRepositories = remoteArtifactRepositories; - } - - /** - * Getter for <code>artifactFactory</code>. - * - * @return Returns the artifactFactory. - */ - public ArtifactFactory getArtifactFactory() - { - return artifactFactory; - } - - /** - * Setter for <code>artifactFactory</code>. - * - * @param artifactFactory The artifactFactory to set. - */ - public void setArtifactFactory( ArtifactFactory artifactFactory ) - { - this.artifactFactory = artifactFactory; - } - - /** - * Getter for <code>artifactResolver</code>. - * - * @return Returns the artifactResolver. - */ - public ArtifactResolver getArtifactResolver() - { - return artifactResolver; - } - - /** - * Setter for <code>artifactResolver</code>. - * - * @param artifactResolver The artifactResolver to set. - */ - public void setArtifactResolver( ArtifactResolver artifactResolver ) - { - this.artifactResolver = artifactResolver; - } - - /** - * Getter for <code>executedProject</code>. - * - * @return Returns the executedProject. - */ - public MavenProject getExecutedProject() - { - return executedProject; - } - - /** - * Setter for <code>executedProject</code>. - * - * @param executedProject The executedProject to set. - */ - public void setExecutedProject( MavenProject executedProject ) - { - this.executedProject = executedProject; - } - - /** - * Getter for <code>localRepository</code>. - * - * @return Returns the localRepository. - */ - public ArtifactRepository getLocalRepository() - { - return localRepository; - } - - /** - * Setter for <code>localRepository</code>. - * - * @param localRepository The localRepository to set. - */ - public void setLocalRepository( ArtifactRepository localRepository ) - { - this.localRepository = localRepository; - } - - /** - * Getter for <code>downloadJavadocs</code>. - * - * @return Returns the downloadJavadocs. - */ - public boolean getDownloadJavadocs() - { - return downloadJavadocs; - } - - /** - * Setter for <code>downloadJavadocs</code>. - * - * @param downloadJavadoc The downloadJavadocs to set. - */ - public void setDownloadJavadocs( boolean downloadJavadoc ) - { - downloadJavadocs = downloadJavadoc; - } - - /** - * Getter for <code>downloadSources</code>. - * - * @return Returns the downloadSources. - */ - public boolean getDownloadSources() - { - return downloadSources; - } - - /** - * Setter for <code>downloadSources</code>. - * - * @param downloadSources The downloadSources to set. - */ - public void setDownloadSources( boolean downloadSources ) - { - this.downloadSources = downloadSources; - } - - protected void setResolveDependencies( boolean resolveDependencies ) - { - this.resolveDependencies = resolveDependencies; - } - - protected boolean isResolveDependencies() - { - return resolveDependencies; - } - - /** - * return <code>false</code> if projects available in a reactor build should be considered normal dependencies, - * <code>true</code> if referenced project will be linked and not need artifact resolution. - * - * @return <code>true</code> if referenced project will be linked and not need artifact resolution - */ - protected abstract boolean getUseProjectReferences(); - - /** - * Hook for preparation steps before the actual plugin execution. - * - * @return <code>true</code> if execution should continue or <code>false</code> if not. - * @throws MojoExecutionException generic mojo exception - */ - protected abstract boolean setup() - throws MojoExecutionException; - - /** - * Main plugin method where dependencies should be processed in order to generate IDE configuration files. - * - * @param deps list of <code>IdeDependency</code> objects, with artifacts, sources and javadocs already resolved - * @throws MojoExecutionException generic mojo exception - */ - protected abstract void writeConfiguration( IdeDependency[] deps ) - throws MojoExecutionException; - - /** - * Not a plugin parameter. Collect the list of dependencies with a missing source artifact for the final report. - */ - private List missingSourceDependencies = new ArrayList(); - - /** - * Not a plugin parameter. Collect the list of dependencies with a missing javadoc artifact for the final report. - */ - // TODO merge this with the missingSourceDependencies in a classifier based map? - private List missingJavadocDependencies = new ArrayList(); - - /** - * Cached array of resolved dependencies. - */ - private IdeDependency[] ideDeps; - - /** - * Flag for mojo implementations to control whether normal maven dependencies should be resolved. Default value is - * true. - */ - private boolean resolveDependencies = true; - - /** - * @see org.codehaus.plexus.logging.LogEnabled#enableLogging(org.codehaus.plexus.logging.Logger) - */ - public void enableLogging( Logger logger ) - { - this.logger = logger; - } - - /** - * @see org.apache.maven.plugin.Mojo#execute() - */ - public final void execute() - throws MojoExecutionException, MojoFailureException - { - if ( skip ) - { - return; - } - - boolean processProject = setup(); - if ( !processProject ) - { - return; - } - - // resolve artifacts - IdeDependency[] deps = doDependencyResolution(); - - resolveSourceAndJavadocArtifacts( deps ); - - writeConfiguration( deps ); - - reportMissingArtifacts(); - - } - - /** - * Resolve project dependencies. Manual resolution is needed in order to avoid resolution of multiproject artifacts - * (if projects will be linked each other an installed jar is not needed) and to avoid a failure when a jar is - * missing. - * - * @throws MojoExecutionException if dependencies can't be resolved - * @return resolved IDE dependencies, with attached jars for non-reactor dependencies - */ - protected IdeDependency[] doDependencyResolution() - throws MojoExecutionException - { - if ( ideDeps == null ) - { - if ( resolveDependencies ) - { - MavenProject project = getProject(); - Set<String> imported = Collections.emptySet(); - try { - imported = BundleUtil.getImportedPackages(project.getBasedir()); - } catch (IOException e1) { - throw new MojoExecutionException(e1.getMessage(), e1); - } - ArtifactRepository localRepo = getLocalRepository(); - - List deps = getProject().getDependencies(); - - // Collect the list of resolved IdeDependencies. - List dependencies = new ArrayList(); - - if ( deps != null ) - { - Map managedVersions = - createManagedVersionMap( getArtifactFactory(), project.getId(), - project.getDependencyManagement() ); - - ArtifactResolutionResult artifactResolutionResult = null; - - try - { - - List listeners = new ArrayList(); - - if ( logger.isDebugEnabled() ) - { - listeners.add( new DebugResolutionListener( logger ) ); - } - - listeners.add( new WarningResolutionListener( logger ) ); - - artifactResolutionResult = - artifactCollector.collect( getProjectArtifacts(), project.getArtifact(), managedVersions, - localRepo, project.getRemoteArtifactRepositories(), - getArtifactMetadataSource(), null, listeners ); - } - catch ( ArtifactResolutionException e ) - { - getLog().debug( e.getMessage(), e ); - getLog().error( - Messages.getString( "AbstractIdeSupportMojo.artifactresolution", new Object[] { //$NON-NLS-1$ - e.getGroupId(), e.getArtifactId(), e.getVersion(), - e.getMessage() } ) ); - - // if we are here artifactResolutionResult is null, create a project without dependencies but - // don't fail - // (this could be a reactor projects, we don't want to fail everything) - // Causes MECLIPSE-185. Not sure if it should be handled this way?? - return new IdeDependency[0]; - } - - // keep track of added reactor projects in order to avoid duplicates - Set emittedReactorProjectId = new HashSet(); - - for ( Iterator i = artifactResolutionResult.getArtifactResolutionNodes().iterator(); i.hasNext(); ) - { - - ResolutionNode node = (ResolutionNode) i.next(); - int dependencyDepth = node.getDepth(); - Artifact art = node.getArtifact(); - // don't resolve jars for reactor projects - if ( hasToResolveJar( art ) ) - { - try - { - artifactResolver.resolve( art, node.getRemoteRepositories(), localRepository ); - } - catch ( ArtifactNotFoundException e ) - { - getLog().debug( e.getMessage(), e ); - getLog().warn( - Messages.getString( "AbstractIdeSupportMojo.artifactdownload", new Object[] { //$NON-NLS-1$ - e.getGroupId(), e.getArtifactId(), e.getVersion(), - e.getMessage() } ) ); - } - catch ( ArtifactResolutionException e ) - { - getLog().debug( e.getMessage(), e ); - getLog().warn( - Messages.getString( "AbstractIdeSupportMojo.artifactresolution", new Object[] { //$NON-NLS-1$ - e.getGroupId(), e.getArtifactId(), e.getVersion(), - e.getMessage() } ) ); - } - } - - boolean includeArtifact = true; - if ( getExcludes() != null ) - { - String artifactFullId = art.getGroupId() + ":" + art.getArtifactId(); - if ( getExcludes().contains( artifactFullId ) ) - { - getLog().info( "excluded: " + artifactFullId ); - includeArtifact = false; - } - } - - if ( includeArtifact - && ( !( getUseProjectReferences() && isAvailableAsAReactorProject( art ) ) || emittedReactorProjectId.add( art.getGroupId() - + '-' + art.getArtifactId() ) ) ) - { - - // the following doesn't work: art.getArtifactHandler().getPackaging() always returns "jar" - // also - // if the packaging specified in pom.xml is different. - - // osgi-bundle packaging is provided by the felix osgi plugin - // eclipse-plugin packaging is provided by this eclipse plugin - // String packaging = art.getArtifactHandler().getPackaging(); - // boolean isOsgiBundle = "osgi-bundle".equals( packaging ) || "eclipse-plugin".equals( - // packaging ); - - // we need to check the manifest, if "Bundle-SymbolicName" is there the artifact can be - // considered - // an osgi bundle - if ("pom".equals(art.getType())) { - continue; - } - File artifactFile = art.getFile(); - MavenProject reactorProject = getReactorProject(art); - if (reactorProject != null) { - artifactFile = reactorProject.getBasedir(); - } - boolean isOsgiBundle = false; - String osgiSymbolicName = null; - try { - osgiSymbolicName = BundleUtil.getBundleSymbolicName(artifactFile); - } catch (IOException e) { - getLog().error("Unable to read jar manifest from " + artifactFile, e); - } - isOsgiBundle = osgiSymbolicName != null; - - IdeDependency dep = - new IdeDependency( art.getGroupId(), art.getArtifactId(), art.getVersion(), - art.getClassifier(), useProjectReference( art ), - Artifact.SCOPE_TEST.equals( art.getScope() ), - Artifact.SCOPE_SYSTEM.equals( art.getScope() ), - Artifact.SCOPE_PROVIDED.equals( art.getScope() ), - art.getArtifactHandler().isAddedToClasspath(), art.getFile(), - art.getType(), isOsgiBundle, osgiSymbolicName, dependencyDepth, - getProjectNameForArifact( art ) ); - // no duplicate entries allowed. System paths can cause this problem. - if ( !dependencies.contains( dep ) ) - { - // [rfeng] Do not add compile/provided dependencies - if (!(pde && (Artifact.SCOPE_COMPILE.equals(art.getScope()) || Artifact.SCOPE_PROVIDED - .equals(art.getScope())))) { - dependencies.add( dep ); - } else { - // Check this compile dependency is an OSGi package supplier - if (!imported.isEmpty()) { - Set<String> exported = Collections.emptySet(); - try { - exported = BundleUtil.getExportedPackages(artifactFile); - } catch (IOException e) { - getLog().error("Unable to read jar manifest from " + art.getFile(), e); - } - boolean matched = false; - for (String p : imported) { - if (exported.contains(p)) { - matched = true; - break; - } - } - if (!matched) { - dependencies.add(dep); - } else { - getLog() - .debug("Compile dependency is skipped as it is added through OSGi dependency: " + art); - } - } else { - dependencies.add(dep); - } - } - } - } - - } - - // @todo a final report with the list of - // missingArtifacts? - - } - - ideDeps = (IdeDependency[]) dependencies.toArray( new IdeDependency[dependencies.size()] ); - } - else - { - ideDeps = new IdeDependency[0]; - } - } - - return ideDeps; - } - - /** - * Find the name of the project as used in eclipse. - * - * @param artifact The artifact to find the eclipse name for. - * @return The name os the eclipse project. - */ - abstract public String getProjectNameForArifact( Artifact artifact ); - - /** - * Returns the list of project artifacts. Also artifacts generated from referenced projects will be added, but with - * the <code>resolved</code> property set to true. - * - * @return list of projects artifacts - * @throws MojoExecutionException if unable to parse dependency versions - */ - private Set getProjectArtifacts() - throws MojoExecutionException - { - // keep it sorted, this should avoid random classpath order in tests - Set artifacts = new TreeSet(); - - for ( Iterator dependencies = getProject().getDependencies().iterator(); dependencies.hasNext(); ) - { - Dependency dependency = (Dependency) dependencies.next(); - - String groupId = dependency.getGroupId(); - String artifactId = dependency.getArtifactId(); - VersionRange versionRange; - try - { - versionRange = VersionRange.createFromVersionSpec( dependency.getVersion() ); - } - catch ( InvalidVersionSpecificationException e ) - { - throw new MojoExecutionException( - Messages.getString( - "AbstractIdeSupportMojo.unabletoparseversion", new Object[] { //$NON-NLS-1$ - dependency.getArtifactId(), - dependency.getVersion(), - dependency.getManagementKey(), e.getMessage() } ), - e ); - } - - String type = dependency.getType(); - if ( type == null ) - { - type = Constants.PROJECT_PACKAGING_JAR; - } - String classifier = dependency.getClassifier(); - boolean optional = dependency.isOptional(); - String scope = dependency.getScope(); - if ( scope == null ) - { - scope = Artifact.SCOPE_COMPILE; - } - - Artifact art = - getArtifactFactory().createDependencyArtifact( groupId, artifactId, versionRange, type, classifier, - scope, optional ); - - if ( scope.equalsIgnoreCase( Artifact.SCOPE_SYSTEM ) ) - { - art.setFile( new File( dependency.getSystemPath() ) ); - } - - List exclusions = new ArrayList(); - for ( Iterator j = dependency.getExclusions().iterator(); j.hasNext(); ) - { - Exclusion e = (Exclusion) j.next(); - exclusions.add( e.getGroupId() + ":" + e.getArtifactId() ); //$NON-NLS-1$ - } - - ArtifactFilter newFilter = new ExcludesArtifactFilter( exclusions ); - - art.setDependencyFilter( newFilter ); - - artifacts.add( art ); - } - - return artifacts; - } - - /** - * Utility method that locates a project producing the given artifact. - * - * @param artifact the artifact a project should produce. - * @return <code>true</code> if the artifact is produced by a reactor projectart. - */ - protected boolean isAvailableAsAReactorProject( Artifact artifact ) - { - return getReactorProject( artifact ) != null; - } - - /** - * Checks the list of reactor projects to see if the artifact is included. - * - * @param artifact the artifact to check if it is in the reactor - * @return the reactor project or null if it is not in the reactor - */ - protected MavenProject getReactorProject( Artifact artifact ) { - if ( reactorProjects != null ) - { - for ( Iterator iter = reactorProjects.iterator(); iter.hasNext(); ) - { - MavenProject reactorProject = (MavenProject) iter.next(); - - if ( reactorProject.getGroupId().equals( artifact.getGroupId() ) - && reactorProject.getArtifactId().equals( artifact.getArtifactId() ) ) - { - if ( reactorProject.getVersion().equals( artifact.getVersion() ) ) - { - return reactorProject; - } - else - { - getLog().info( - "Artifact " - + artifact.getId() - + " already available as a reactor project, but with different version. Expected: " - + artifact.getVersion() + ", found: " + reactorProject.getVersion() ); - } - } - } - } - return null; - } - - /** - * @return an array with all dependencies avalaible in the workspace, to be implemented by the subclasses. - */ - protected IdeDependency[] getWorkspaceArtefacts() - { - return new IdeDependency[0]; - } - - private Map createManagedVersionMap( ArtifactFactory artifactFactory, String projectId, - DependencyManagement dependencyManagement ) - throws MojoExecutionException - { - Map map; - if ( dependencyManagement != null && dependencyManagement.getDependencies() != null ) - { - map = new HashMap(); - for ( Iterator i = dependencyManagement.getDependencies().iterator(); i.hasNext(); ) - { - Dependency d = (Dependency) i.next(); - - try - { - VersionRange versionRange = VersionRange.createFromVersionSpec( d.getVersion() ); - Artifact artifact = - artifactFactory.createDependencyArtifact( d.getGroupId(), d.getArtifactId(), versionRange, - d.getType(), d.getClassifier(), d.getScope(), - d.isOptional() ); - map.put( d.getManagementKey(), artifact ); - } - catch ( InvalidVersionSpecificationException e ) - { - throw new MojoExecutionException( Messages.getString( "AbstractIdeSupportMojo.unabletoparseversion", new Object[] { //$NON-NLS-1$ - projectId, d.getVersion(), - d.getManagementKey(), e.getMessage() } ), - e ); - } - } - } - else - { - map = Collections.EMPTY_MAP; - } - return map; - } - - /** - * Resolve source artifacts and download them if <code>downloadSources</code> is <code>true</code>. Source and - * javadocs artifacts will be attached to the <code>IdeDependency</code> Resolve source and javadoc artifacts. The - * resolved artifacts will be downloaded based on the <code>downloadSources</code> and <code>downloadJavadocs</code> - * attributes. Source and - * - * @param deps resolved dependencies - */ - private void resolveSourceAndJavadocArtifacts( IdeDependency[] deps ) - { - final List missingSources = - resolveDependenciesWithClassifier( deps, "sources", getDownloadSources() ); - missingSourceDependencies.addAll( missingSources ); - - final List missingJavadocs = - resolveDependenciesWithClassifier( deps, "javadoc", getDownloadJavadocs() ); - missingJavadocDependencies.addAll( missingJavadocs ); - } - - /** - * Resolve the required artifacts for each of the dependency. <code>sources</code> or <code>javadoc</code> artifacts - * (depending on the <code>classifier</code>) are attached to the dependency. - * - * @param deps resolved dependencies - * @param inClassifier the classifier we are looking for (either <code>sources</code> or <code>javadoc</code>) - * @param includeRemoteRepositories flag whether we should search remote repositories for the artifacts or not - * @return the list of dependencies for which the required artifact was not found - */ - private List resolveDependenciesWithClassifier( IdeDependency[] deps, String inClassifier, - boolean includeRemoteRepositories ) - { - List missingClassifierDependencies = new ArrayList(); - - // if downloadSources is off, just check - // local repository for reporting missing source jars - List remoteRepos = includeRemoteRepositories ? getRemoteArtifactRepositories() : Collections.EMPTY_LIST; - - for ( int j = 0; j < deps.length; j++ ) - { - IdeDependency dependency = deps[j]; - - if ( dependency.isReferencedProject() || dependency.isSystemScoped() ) - { - // artifact not needed - continue; - } - - if ( getLog().isDebugEnabled() ) - { - getLog().debug( - "Searching for sources for " + dependency.getId() + ":" + dependency.getClassifier() - + " at " + dependency.getId() + ":" + inClassifier ); - } - - Artifact baseArtifact = - artifactFactory.createArtifactWithClassifier( dependency.getGroupId(), dependency.getArtifactId(), - dependency.getVersion(), dependency.getType(), - dependency.getClassifier() ); - baseArtifact = - IdeUtils.resolveArtifact( artifactResolver, baseArtifact, remoteRepos, localRepository, getLog() ); - if (!baseArtifact.isResolved()) { - // base artifact does not exist - no point checking for javadoc/sources - continue; - } - - Artifact artifact = - IdeUtils.createArtifactWithClassifier( dependency.getGroupId(), dependency.getArtifactId(), - dependency.getVersion(), dependency.getClassifier(), - inClassifier, artifactFactory ); - File notAvailableMarkerFile = IdeUtils.getNotAvailableMarkerFile( localRepository, artifact ); - - if (forceRecheck && notAvailableMarkerFile.exists()) { - if (!notAvailableMarkerFile.delete()) { - getLog().warn( Messages.getString( "AbstractIdeSupportMojo.unabletodeletenotavailablemarkerfile", notAvailableMarkerFile ) ); - } - } - - if ( !notAvailableMarkerFile.exists() ) - { - artifact = - IdeUtils.resolveArtifact( artifactResolver, artifact, remoteRepos, localRepository, getLog() ); - if ( artifact.isResolved() ) - { - if ( "sources".equals( inClassifier ) ) - { - dependency.setSourceAttachment( artifact.getFile() ); - } - else if ( "javadoc".equals( inClassifier ) ) - { - dependency.setJavadocAttachment( artifact.getFile() ); - } - } - else - { - if ( includeRemoteRepositories ) - { - try - { - notAvailableMarkerFile.createNewFile(); - getLog().debug( Messages.getString( "AbstractIdeSupportMojo.creatednotavailablemarkerfile", notAvailableMarkerFile ) ); - } - catch ( IOException e ) - { - getLog().warn( Messages.getString( "AbstractIdeSupportMojo.failedtocreatenotavailablemarkerfile", - notAvailableMarkerFile ) ); - } - } - // add the dependencies to the list - // of those lacking the required - // artifact - missingClassifierDependencies.add( dependency ); - } - } - } - - // return the list of dependencies missing the - // required artifact - return missingClassifierDependencies; - - } - - /** - * Output a message with the list of missing dependencies and info on how turn download on if it was disabled. - */ - private void reportMissingArtifacts() - { - StringBuffer msg = new StringBuffer(); - - if ( !missingSourceDependencies.isEmpty() ) - { - if ( getDownloadSources() ) - { - msg.append( Messages.getString( "AbstractIdeSupportMojo.sourcesnotavailable" ) ); //$NON-NLS-1$ - } - else - { - msg.append( Messages.getString( "AbstractIdeSupportMojo.sourcesnotdownloaded" ) ); //$NON-NLS-1$ - } - - for ( Iterator it = missingSourceDependencies.iterator(); it.hasNext(); ) - { - IdeDependency art = (IdeDependency) it.next(); - msg.append( Messages.getString( "AbstractIdeSupportMojo.sourcesmissingitem", art.getId() ) ); //$NON-NLS-1$ - } - msg.append( "\n" ); //$NON-NLS-1$ - } - - if ( !missingJavadocDependencies.isEmpty() ) - { - if ( getDownloadJavadocs() ) - { - msg.append( Messages.getString( "AbstractIdeSupportMojo.javadocnotavailable" ) ); //$NON-NLS-1$ - } - else - { - msg.append( Messages.getString( "AbstractIdeSupportMojo.javadocnotdownloaded" ) ); //$NON-NLS-1$ - } - - for ( Iterator it = missingJavadocDependencies.iterator(); it.hasNext(); ) - { - IdeDependency art = (IdeDependency) it.next(); - msg.append( Messages.getString( "AbstractIdeSupportMojo.javadocmissingitem", art.getId() ) ); //$NON-NLS-1$ - } - msg.append( "\n" ); //$NON-NLS-1$ - } - getLog().info( msg ); - } - - /** - * @return List of dependencies to exclude from eclipse classpath. - * @since 2.5 - */ - public abstract List getExcludes(); - - /** - * Checks if jar has to be resolved for the given artifact - * - * @param art the artifact to check - * @return true if resolution should happen - */ - protected boolean hasToResolveJar( Artifact art ) - { - return !( getUseProjectReferences() && isAvailableAsAReactorProject( 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 boolean useProjectReference( Artifact art ) - { - return getUseProjectReferences() && isAvailableAsAReactorProject( art ); - } - - /** - * Checks whether the currently running Maven satisfies the specified version (range). - * - * @param version The version range to test for, must not be <code>null</code>. - * @return <code>true</code> if the current Maven version matches the specified version range, <code>false</code> - * otherwise. - */ - protected boolean isMavenVersion( String version ) - { - try - { - VersionRange versionRange = VersionRange.createFromVersionSpec( version ); - ArtifactVersion mavenVersion = runtimeInformation.getApplicationVersion(); - return versionRange.containsVersion( mavenVersion ); - } - catch ( InvalidVersionSpecificationException e ) - { - throw new IllegalArgumentException( e.getMessage() ); - } - } - - // [rfeng] - protected boolean isOSGiBundle() { - File base = project.getBasedir(); - File mf = new File(base, "META-INF/MANIFEST.MF"); - if (mf.isFile()) { - Manifest manifest = null; - try { - InputStream is = new FileInputStream(mf); - manifest = new Manifest(is); - is.close(); - } catch (IOException e) { - // Ignore - } - if (manifest != null) { - String bundleName = manifest.getMainAttributes().getValue("Bundle-SymbolicName"); - if (bundleName != null) { - return true; - } - } - } - return false; - } - -} diff --git a/maven-plugins/tags/tuscany-bundle-plugin-1.0.8/src/main/java/org/apache/tuscany/maven/plugin/eclipse/EclipseClasspathWriter.java b/maven-plugins/tags/tuscany-bundle-plugin-1.0.8/src/main/java/org/apache/tuscany/maven/plugin/eclipse/EclipseClasspathWriter.java deleted file mode 100644 index 3fec54ba35..0000000000 --- a/maven-plugins/tags/tuscany-bundle-plugin-1.0.8/src/main/java/org/apache/tuscany/maven/plugin/eclipse/EclipseClasspathWriter.java +++ /dev/null @@ -1,635 +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.OutputStreamWriter; -import java.io.Writer; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import org.apache.maven.plugin.MojoExecutionException; -import org.apache.maven.plugin.eclipse.Constants; -import org.apache.maven.plugin.eclipse.EclipseSourceDir; -import org.apache.maven.plugin.eclipse.Messages; -import org.apache.maven.plugin.eclipse.writers.AbstractEclipseWriter; -import org.apache.maven.plugin.ide.IdeDependency; -import org.apache.maven.plugin.ide.IdeUtils; -import org.codehaus.plexus.util.IOUtil; -import org.codehaus.plexus.util.StringUtils; -import org.codehaus.plexus.util.xml.PrettyPrintXMLWriter; -import org.codehaus.plexus.util.xml.XMLWriter; - -/** - * Writes eclipse .classpath file. - * - * @author <a href="mailto:trygvis@inamo.no">Trygve Laugstøl</a> - * @author <a href="mailto:kenney@neonics.com">Kenney Westerhof</a> - * @author <a href="mailto:fgiust@apache.org">Fabrizio Giustina</a> - * @version $Id: EclipseClasspathWriter.java 750073 2009-03-04 16:55:01Z aheritier $ - */ -public class EclipseClasspathWriter - extends AbstractEclipseWriter -{ - - /** - * - */ - private static final String ORG_ECLIPSE_AJDT_INPATH = "org.eclipse.ajdt.inpath"; - - /** - * - */ - private static final String ORG_ECLIPSE_AJDT_ASPECTPATH = "org.eclipse.ajdt.aspectpath"; - - /** - * - */ - private static final String NAME = "name"; - - /** - * - */ - private static final String VALUE = "value"; - - /** - * - */ - private static final String ATTRIBUTE = "attribute"; - - /** - * - */ - private static final String ATTRIBUTES = "attributes"; - - /** - * Eclipse build path variable M2_REPO - */ - protected static final String M2_REPO = "M2_REPO"; //$NON-NLS-1$ - - /** - * Attribute for sourcepath. - */ - private static final String ATTR_SOURCEPATH = "sourcepath"; //$NON-NLS-1$ - - /** - * Attribute for output. - */ - private static final String ATTR_OUTPUT = "output"; //$NON-NLS-1$ - - /** - * Attribute for path. - */ - private static final String ATTR_PATH = "path"; //$NON-NLS-1$ - - /** - * Attribute for kind - Container (con), Variable (var)..etc. - */ - private static final String ATTR_KIND = "kind"; //$NON-NLS-1$ - - /** - * Attribute value for kind: var - */ - private static final String ATTR_VAR = "var"; //$NON-NLS-1$ - - /** - * Attribute value for kind: lib - */ - private static final String ATTR_LIB = "lib"; //$NON-NLS-1$ - - /** - * Attribute value for kind: src - */ - private static final String ATTR_SRC = "src"; //$NON-NLS-1$ - - /** - * Attribute name for source file includes in a path. - */ - private static final String ATTR_INCLUDING = "including"; - - /** - * Attribute name for source file excludes in a path. - */ - private static final String ATTR_EXCLUDING = "excluding"; - - /** - * Element for classpathentry. - */ - private static final String ELT_CLASSPATHENTRY = "classpathentry"; //$NON-NLS-1$ - - /** - * Element for classpath. - */ - private static final String ELT_CLASSPATH = "classpath"; //$NON-NLS-1$ - - /** - * File name that stores project classpath settings. - */ - private static final String FILE_DOT_CLASSPATH = ".classpath"; //$NON-NLS-1$ - - /** - * @see org.apache.maven.plugin.eclipse.writers.EclipseWriter#write() - */ - public void write() - throws MojoExecutionException - { - - Writer w; - - try - { - w = - new OutputStreamWriter( new FileOutputStream( new File( config.getEclipseProjectDirectory(), - FILE_DOT_CLASSPATH ) ), "UTF-8" ); - } - catch ( IOException ex ) - { - throw new MojoExecutionException( Messages.getString( "EclipsePlugin.erroropeningfile" ), ex ); //$NON-NLS-1$ - } - - XMLWriter writer = new PrettyPrintXMLWriter( w ); - - writer.startElement( ELT_CLASSPATH ); - - String defaultOutput = - IdeUtils.toRelativeAndFixSeparator( config.getProjectBaseDir(), config.getBuildOutputDirectory(), false ); - - // ---------------------------------------------------------------------- - // Source roots and resources - // ---------------------------------------------------------------------- - - // List<EclipseSourceDir> - List specialSources = new ArrayList(); - - // Map<String,List<EclipseSourceDir>> - Map byOutputDir = new HashMap(); - - for ( int j = 0; j < config.getSourceDirs().length; j++ ) - { - EclipseSourceDir dir = config.getSourceDirs()[j]; - - // List<EclipseSourceDir> - List byOutputDirs = (List) byOutputDir.get( dir.getOutput() ); - if ( byOutputDirs == null ) - { - // ArrayList<EclipseSourceDir> - byOutputDir.put( dir.getOutput() == null ? defaultOutput : dir.getOutput(), byOutputDirs = - new ArrayList() ); - } - byOutputDirs.add( dir ); - } - - for ( int j = 0; j < config.getSourceDirs().length; j++ ) - { - EclipseSourceDir dir = config.getSourceDirs()[j]; - - log.debug( "Processing " + ( dir.isResource() ? "re" : "" ) + "source " + dir.getPath() + ": output=" - + dir.getOutput() + "; default output=" + defaultOutput ); - - boolean isSpecial = false; - - // handle resource with nested output folders - if ( dir.isResource() ) - { - // Check if the output is a subdirectory of the default output, - // and if the default output has any sources that copy there. - - if ( dir.getOutput() != null // resource output dir is set - && !dir.getOutput().equals( defaultOutput ) // output dir is not default target/classes - && dir.getOutput().startsWith( defaultOutput ) // ... but is nested - && byOutputDir.get( defaultOutput ) != null // ??? - && !( (List) byOutputDir.get( defaultOutput ) ).isEmpty() // ??? - ) - { - // do not specify as source since the output will be nested. Instead, mark - // it as a todo, and handle it with a custom build.xml file later. - - log.debug( "Marking as special to prevent output folder nesting: " + dir.getPath() + " (output=" - + dir.getOutput() + ")" ); - - isSpecial = true; - specialSources.add( dir ); - } - } - - writer.startElement( ELT_CLASSPATHENTRY ); - - writer.addAttribute( ATTR_KIND, "src" ); //$NON-NLS-1$ - writer.addAttribute( ATTR_PATH, dir.getPath() ); - - if ( !isSpecial && dir.getOutput() != null && !defaultOutput.equals( dir.getOutput() ) ) - { - writer.addAttribute( ATTR_OUTPUT, dir.getOutput() ); - } - - String includes = dir.getInclude(); - - if ( !dir.isResource() ) - { - // automatically include java files only: eclipse doesn't have the concept of a source only directory so it - // will try to include non-java files found in maven source dirs - includes = StringUtils.isEmpty( includes ) ? "**/*.java" : includes + "|**/*.java"; - } - - if ( StringUtils.isNotEmpty( includes ) ) - { - writer.addAttribute( ATTR_INCLUDING, includes ); - } - - String excludes = dir.getExclude(); - - if ( dir.isResource() ) - { - // automatically exclude java files: eclipse doesn't have the concept of resource directory so it will - // try to compile any java file found in maven resource dirs - excludes = StringUtils.isEmpty( excludes ) ? "**/*.java" : excludes + "|**/*.java"; - } - - if ( StringUtils.isNotEmpty( excludes ) ) - { - writer.addAttribute( ATTR_EXCLUDING, excludes ); - } - - writer.endElement(); - - } - - /* - // handle the special sources. - if ( !specialSources.isEmpty() ) - { - log.info( "Creating maven-eclipse.xml Ant file to handle resources" ); - - try - { - Writer buildXmlWriter = - new OutputStreamWriter( new FileOutputStream( new File( config.getEclipseProjectDirectory(), - "maven-eclipse.xml" ) ), "UTF-8" ); - PrettyPrintXMLWriter buildXmlPrinter = new PrettyPrintXMLWriter( buildXmlWriter ); - - buildXmlPrinter.startElement( "project" ); - buildXmlPrinter.addAttribute( "default", "copy-resources" ); - - buildXmlPrinter.startElement( "target" ); - buildXmlPrinter.addAttribute( NAME, "init" ); - // initialize filtering tokens here - buildXmlPrinter.endElement(); - - buildXmlPrinter.startElement( "target" ); - buildXmlPrinter.addAttribute( NAME, "copy-resources" ); - buildXmlPrinter.addAttribute( "depends", "init" ); - - for ( Iterator it = specialSources.iterator(); it.hasNext(); ) - { - // TODO: merge source dirs on output path+filtering to reduce - // <copy> tags for speed. - EclipseSourceDir dir = (EclipseSourceDir) it.next(); - buildXmlPrinter.startElement( "copy" ); - buildXmlPrinter.addAttribute( "todir", dir.getOutput() ); - buildXmlPrinter.addAttribute( "filtering", "" + dir.isFiltering() ); - - buildXmlPrinter.startElement( "fileset" ); - buildXmlPrinter.addAttribute( "dir", dir.getPath() ); - if ( dir.getInclude() != null ) - { - buildXmlPrinter.addAttribute( "includes", dir.getInclude() ); - } - if ( dir.getExclude() != null ) - { - buildXmlPrinter.addAttribute( "excludes", dir.getExclude() ); - } - buildXmlPrinter.endElement(); - - buildXmlPrinter.endElement(); - } - - buildXmlPrinter.endElement(); - - buildXmlPrinter.endElement(); - - IOUtil.close( buildXmlWriter ); - } - catch ( IOException e ) - { - throw new MojoExecutionException( "Cannot create " + config.getEclipseProjectDirectory() - + "/maven-eclipse.xml", e ); - } - - log.info( "Creating external launcher file" ); - // now create the launcher - new EclipseAntExternalLaunchConfigurationWriter().init( log, config, "Maven_Ant_Builder.launch", - "maven-eclipse.xml" ).write(); - - // finally add it to the project writer. - - config.getBuildCommands().add( - new BuildCommand( - "org.eclipse.ui.externaltools.ExternalToolBuilder", - "LaunchConfigHandle", - "<project>/" - + EclipseLaunchConfigurationWriter.FILE_DOT_EXTERNAL_TOOL_BUILDERS - + "Maven_Ant_Builder.launch" ) ); - } - */ - - // ---------------------------------------------------------------------- - // The default output - // ---------------------------------------------------------------------- - - writer.startElement( ELT_CLASSPATHENTRY ); - writer.addAttribute( ATTR_KIND, ATTR_OUTPUT ); - writer.addAttribute( ATTR_PATH, defaultOutput ); - writer.endElement(); - - Set addedDependencies = new HashSet(); - // TODO if (..magic property equals orderDependencies..) - - // ---------------------------------------------------------------------- - // Java API dependencies that may complete the classpath container so must - // be declared BEFORE so that container access rules don't fail - // ---------------------------------------------------------------------- - IdeDependency[] depsToWrite = config.getDepsOrdered(); - for ( int j = 0; j < depsToWrite.length; j++ ) - { - IdeDependency dep = depsToWrite[j]; - if ( dep.isJavaApi() ) - { - String depId = getDependencyId( dep ); - if ( !addedDependencies.contains( depId ) ) - { - addDependency( writer, dep ); - addedDependencies.add( depId ); - } - } - } - - // ---------------------------------------------------------------------- - // The dependencies - // ---------------------------------------------------------------------- - for ( int j = 0; j < depsToWrite.length; j++ ) - { - IdeDependency dep = depsToWrite[j]; - - if ( dep.isAddedToClasspath() ) - { - String depId = getDependencyId( dep ); - /* avoid duplicates in the classpath for artifacts with different types (like ejbs or test-jars) */ - if ( !addedDependencies.contains( depId ) ) - { - addDependency( writer, dep ); - addedDependencies.add( depId ); - } - } - } - - // ---------------------------------------------------------------------- - // Container classpath entries - // ---------------------------------------------------------------------- - - for ( Iterator it = config.getClasspathContainers().iterator(); it.hasNext(); ) - { - writer.startElement( ELT_CLASSPATHENTRY ); - writer.addAttribute( ATTR_KIND, "con" ); //$NON-NLS-1$ - writer.addAttribute( ATTR_PATH, (String) it.next() ); - writer.endElement(); // name - } - - writer.endElement(); - - IOUtil.close( w ); - - } - - private String getDependencyId( IdeDependency dep ) - { - String depId = - dep.getGroupId() + ":" + dep.getArtifactId() + ":" + dep.getClassifier() + ":" + dep.getVersion(); - - if ( dep.isReferencedProject() ) - { - // This dependency will be refered as an eclipse project - depId = dep.getEclipseProjectName(); - } - return depId; - } - - protected void addDependency( XMLWriter writer, IdeDependency dep ) - throws MojoExecutionException - { - - String path; - String kind; - String sourcepath = null; - String javadocpath = null; - // [rfeng] Force to non-PDE mode - boolean pdeMode = false; - - if ( dep.isReferencedProject() && !pdeMode ) - { - path = "/" + dep.getEclipseProjectName(); //$NON-NLS-1$ - kind = ATTR_SRC; - } - else if ( dep.isReferencedProject() && pdeMode ) - { - // don't do anything, referenced projects are automatically handled by eclipse in PDE builds - return; - } - else - { - File artifactPath = dep.getFile(); - - if ( artifactPath == null ) - { - log.error( Messages.getString( "EclipsePlugin.artifactpathisnull", dep.getId() ) ); //$NON-NLS-1$ - return; - } - - if ( dep.isSystemScoped() ) - { - path = IdeUtils.toRelativeAndFixSeparator( config.getEclipseProjectDirectory(), artifactPath, false ); - - if ( log.isDebugEnabled() ) - { - log.debug( Messages.getString( "EclipsePlugin.artifactissystemscoped", //$NON-NLS-1$ - new Object[] { dep.getArtifactId(), path } ) ); - } - - kind = ATTR_LIB; - } - else - { - File localRepositoryFile = new File( config.getLocalRepository().getBasedir() ); - - // if the dependency is not provided and the plugin runs in "pde mode", the dependency is - // added to the Bundle-Classpath: - if ( pdeMode && ( dep.isProvided() || dep.isOsgiBundle() ) ) - { - return; - } - else if ( pdeMode && !dep.isProvided() && !dep.isTestDependency() ) - { - // path for link created in .project, not to the actual file - path = dep.getFile().getName(); - - kind = ATTR_LIB; - } - // running in PDE mode and the dependency is provided means, that it is provided by - // the target platform. This case is covered by adding the plugin container - else - { - String fullPath = artifactPath.getPath(); - String relativePath = - IdeUtils.toRelativeAndFixSeparator( localRepositoryFile, new File( fullPath ), false ); - - if ( !new File( relativePath ).isAbsolute() ) - { - path = M2_REPO + "/" //$NON-NLS-1$ - + relativePath; - kind = ATTR_VAR; //$NON-NLS-1$ - } - else - { - path = relativePath; - kind = ATTR_LIB; - } - } - - if ( dep.getSourceAttachment() != null ) - { - if ( ATTR_VAR.equals( kind ) ) - { - sourcepath = - M2_REPO - + "/" //$NON-NLS-1$ - + IdeUtils.toRelativeAndFixSeparator( localRepositoryFile, dep.getSourceAttachment(), - false ); - } - else - { - // source archive must be referenced with the full path, we can't mix a lib with a variable - sourcepath = IdeUtils.getCanonicalPath( dep.getSourceAttachment() ); - } - } - - if ( dep.getJavadocAttachment() != null ) - { - // NB eclipse (3.1) doesn't support variables in javadoc paths, so we need to add the - // full path for the maven repo - javadocpath = - StringUtils.replace( IdeUtils.getCanonicalPath( dep.getJavadocAttachment() ), "\\", "/" ); //$NON-NLS-1$ //$NON-NLS-2$ - } - - } - - } - - // Skip aspectj libraries since they are in the container. - if ( ( config.getAjdtVersion() != 0 ) && dep.getArtifactId().toLowerCase().startsWith( "aspectj" ) ) - { - return; - } - - writer.startElement( ELT_CLASSPATHENTRY ); - writer.addAttribute( ATTR_KIND, kind ); - writer.addAttribute( ATTR_PATH, path ); - - if ( sourcepath != null ) - { - writer.addAttribute( ATTR_SOURCEPATH, sourcepath ); - } - - boolean attributeElemOpen = false; - - if ( javadocpath != null ) - { - if ( !attributeElemOpen ) - { - writer.startElement( ATTRIBUTES ); //$NON-NLS-1$ - attributeElemOpen = true; - } - - writer.startElement( ATTRIBUTE ); //$NON-NLS-1$ - writer.addAttribute( VALUE, "jar:" + new File( javadocpath ).toURI() + "!/" ); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ - writer.addAttribute( NAME, "javadoc_location" ); //$NON-NLS-1$ //$NON-NLS-2$ - writer.endElement(); - - } - - if ( Constants.PROJECT_PACKAGING_WAR.equals( this.config.getPackaging() ) && config.getWtpapplicationxml() - && kind.equals( ATTR_VAR ) && !dep.isTestDependency() && !dep.isProvided() - && !dep.isSystemScopedOutsideProject( this.config.getProject() ) ) - { - if ( !attributeElemOpen ) - { - writer.startElement( ATTRIBUTES ); //$NON-NLS-1$ - attributeElemOpen = true; - } - - writer.startElement( ATTRIBUTE ); //$NON-NLS-1$ - writer.addAttribute( VALUE, "/WEB-INF/lib" ); //$NON-NLS-1$ //$NON-NLS-2$ - writer.addAttribute( NAME, "org.eclipse.jst.component.dependency" ); //$NON-NLS-1$ //$NON-NLS-2$ - writer.endElement(); - - } - - if ( dep.isAjdtDependency() && ( config.getAjdtVersion() >= 1.5 ) ) - { - if ( !attributeElemOpen ) - { - writer.startElement( ATTRIBUTES ); //$NON-NLS-1$ - attributeElemOpen = true; - } - - writer.startElement( ATTRIBUTE ); //$NON-NLS-1$ - writer.addAttribute( NAME, ORG_ECLIPSE_AJDT_ASPECTPATH ); //$NON-NLS-1$ //$NON-NLS-2$ - writer.addAttribute( VALUE, Boolean.TRUE.toString() ); //$NON-NLS-1$ //$NON-NLS-2$ - writer.endElement(); - - } - - if ( dep.isAjdtWeaveDependency() && ( config.getAjdtVersion() >= 1.5 ) ) - { - if ( !attributeElemOpen ) - { - writer.startElement( ATTRIBUTES ); //$NON-NLS-1$ - attributeElemOpen = true; - } - - writer.startElement( ATTRIBUTE ); //$NON-NLS-1$ - writer.addAttribute( NAME, ORG_ECLIPSE_AJDT_INPATH ); //$NON-NLS-1$ //$NON-NLS-2$ - writer.addAttribute( VALUE, Boolean.TRUE.toString() ); //$NON-NLS-1$ //$NON-NLS-2$ - writer.endElement(); - - } - - if ( attributeElemOpen ) - { - writer.endElement(); - } - writer.endElement(); - - } -} diff --git a/maven-plugins/tags/tuscany-bundle-plugin-1.0.8/src/main/java/org/apache/tuscany/maven/plugin/eclipse/EclipseCleanMojo.java b/maven-plugins/tags/tuscany-bundle-plugin-1.0.8/src/main/java/org/apache/tuscany/maven/plugin/eclipse/EclipseCleanMojo.java deleted file mode 100644 index 397f5e34d6..0000000000 --- a/maven-plugins/tags/tuscany-bundle-plugin-1.0.8/src/main/java/org/apache/tuscany/maven/plugin/eclipse/EclipseCleanMojo.java +++ /dev/null @@ -1,208 +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 org.apache.maven.plugin.AbstractMojo; -import org.apache.maven.plugin.MojoExecutionException; -import org.apache.maven.plugin.eclipse.Constants; -import org.apache.maven.plugin.eclipse.EclipseConfigFile; -import org.apache.maven.plugin.ide.IdeUtils; - -/** - * Deletes the .project, .classpath, .wtpmodules files and .settings folder used by Eclipse. - * - * @goal clean - */ -public class EclipseCleanMojo - extends AbstractMojo -{ - - /** - * Definition file for Eclipse Web Tools project. - */ - private static final String FILE_DOT_WTPMODULES = ".wtpmodules"; //$NON-NLS-1$ - - /** - * Classpath definition file for an Eclipse Java project. - */ - private static final String FILE_DOT_CLASSPATH = ".classpath"; //$NON-NLS-1$ - - /** - * Project definition file for an Eclipse Project. - */ - private static final String FILE_DOT_PROJECT = ".project"; //$NON-NLS-1$ - - /** - * Web Project definition file for Eclipse Web Tools Project (Release 1.0x). - */ - private static final String DIR_DOT_SETTINGS = ".settings"; //$NON-NLS-1$ - - /** - * File name where the WTP component settings will be stored - WTP 1.0 name. - */ - private static final String FILE_DOT_COMPONENT = ".settings/.component"; //$NON-NLS-1$ - - /** - * File name where the WTP component settings will be stored - WTP 1.5 name. - */ - private static final String FILE_DOT_COMPONENT_15 = ".settings/org.eclipse.wst.common.component"; //$NON-NLS-1$ - - /** - * File name where Eclipse Project's Facet configuration will be stored. - */ - private static final String FILE_FACET_CORE_XML = ".settings/org.eclipse.wst.common.project.facet.core.xml"; //$NON-NLS-1$ - - /** - * General project preferences. - */ - private static final String FILE_ECLIPSE_JDT_CORE_PREFS = ".settings/org.eclipse.jdt.core.prefs"; //$NON-NLS-1$ - - /** - * AJDT preferences. - */ - private static final String FILE_AJDT_PREFS = ".settings/org.eclipse.ajdt.ui.prefs"; //$NON-NLS-1$ - - /** - * Packaging for the current project. - * - * @parameter expression="${project.packaging}" - */ - private String packaging; - - /** - * The root directory of the project - * - * @parameter expression="${basedir}" - */ - private File basedir; - - /** - * Skip the operation when true. - * - * @parameter expression="${eclipse.skip}" default-value="false" - */ - private boolean skip; - - /** - * additional generic configuration files for eclipse - * - * @parameter - */ - private EclipseConfigFile[] additionalConfig; - - /** - * @see org.apache.maven.plugin.AbstractMojo#execute() - */ - public void execute() - throws MojoExecutionException - { - if ( skip ) - { - return; - } - - if ( Constants.PROJECT_PACKAGING_POM.equals( this.packaging ) ) - { - return; - } - - delete( new File( basedir, FILE_DOT_PROJECT ) ); - delete( new File( basedir, FILE_DOT_CLASSPATH ) ); - delete( new File( basedir, FILE_DOT_WTPMODULES ) ); - - delete( new File( basedir, FILE_DOT_COMPONENT ) ); - delete( new File( basedir, FILE_DOT_COMPONENT_15 ) ); - delete( new File( basedir, FILE_FACET_CORE_XML ) ); - delete( new File( basedir, FILE_ECLIPSE_JDT_CORE_PREFS ) ); - delete( new File( basedir, FILE_AJDT_PREFS ) ); - - File settingsDir = new File( basedir, DIR_DOT_SETTINGS ); - if ( settingsDir.exists() && settingsDir.isDirectory() && settingsDir.list().length == 0 ) - { - delete( settingsDir ); - } - - if ( additionalConfig != null ) - { - for ( int i = 0; i < additionalConfig.length; i++ ) - { - delete( new File( basedir, additionalConfig[i].getName() ) ); - } - } - - cleanExtras(); - } - - protected void cleanExtras() - throws MojoExecutionException - { - // extension point. - } - - /** - * Delete a file, handling log messages and exceptions - * - * @param f File to be deleted - * @throws MojoExecutionException only if a file exists and can't be deleted - */ - protected void delete( File f ) - throws MojoExecutionException - { - IdeUtils.delete( f, getLog() ); - } - - /** - * Getter for <code>basedir</code>. - * - * @return Returns the basedir. - */ - public File getBasedir() - { - return this.basedir; - } - - /** - * Setter for <code>basedir</code>. - * - * @param basedir The basedir to set. - */ - public void setBasedir( File basedir ) - { - this.basedir = basedir; - } - - /** - * @return the packaging - */ - public String getPackaging() - { - return this.packaging; - } - - /** - * @param packaging the packaging to set - */ - public void setPackaging( String packaging ) - { - this.packaging = packaging; - } - -} 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ø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> - * <projectnatures> - * <projectnature>org.eclipse.jdt.core.javanature</projectnature> - * <projectnature>org.eclipse.wst.common.modulecore.ModuleCoreNature</projectnature> - * </projectnatures> - * </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> - * <additionalProjectnatures> - * <projectnature>org.springframework.ide.eclipse.core.springnature</projectnature> - * </additionalProjectnatures> - * </pre> - * - * @parameter - */ - private List additionalProjectnatures; - - /** - * List of eclipse project facets to be added to the default ones. - * - * <pre> - * <additionalProjectFacets> - * <jst.jsf>1.1<jst.jsf/> - * </additionalProjectFacets> - * </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> - * <buildcommands> - * <buildcommand>org.eclipse.wst.common.modulecore.ComponentStructuralBuilder</buildcommand> - * <buildcommand>org.eclipse.jdt.core.javabuilder</buildcommand> - * <buildcommand>org.eclipse.wst.common.modulecore.ComponentStructuralBuilderDependencyResolver</buildcommand> - * </buildcommands> - * </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> - * <additionalBuildcommands> - * <buildcommand>org.springframework.ide.eclipse.core.springbuilder</buildcommand> - * </additionalBuildcommands> - * </pre> - * - * New style: - * - * <pre> - * <additionalBuildcommands> - * <buildCommand> - * <name>org.ui.externaltools.ExternalToolBuilder</name> - * <triggers>auto,full,incremental,</triggers> - * <arguments> - * <LaunchConfigHandle>&lt;project&gt;./externalToolBuilders/MavenBuilder.launch</LaunchConfighandle> - * </arguments> - * </buildCommand> - * </additionalBuildcommands> - * </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> - * <classpathContainers> - * <classpathContainer>org.eclipse.jdt.launching.JRE_CONTAINER</classpathContainer> - * <classpathContainer>org.eclipse.jst.server.core.container/org.eclipse.jst.server.tomcat.runtimeTarget/Apache Tomcat v5.5</classpathContainer> - * <classpathContainer>org.eclipse.jst.j2ee.internal.web.container/artifact</classpathContainer> - * </classpathContainers> - * </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> - * <plugin> - * <groupId>org.apache.maven.plugins</groupId> - * <artifactId>maven-eclipse-plugin</artifactId> - * <configuration> - * <additionalConfig> - * <file> - * <name>.checkstyle</name> - * <content> - * <![CDATA[<fileset-config file-format-version="1.2.0" simple-config="true"> - * <fileset name="all" enabled="true" check-config-name="acme corporate style" local="false"> - * <file-match-pattern match-pattern="." include-pattern="true"/> - * </fileset> - * <filter name="NonSrcDirs" enabled="true"/> - * </fileset-config>]]> - * </content> - * </file> - * </additionalConfig> - * </configuration> - * </plugin> - * </pre> - * - * Instead of the content you can also define (from version 2.5) an url to download the file : - * - * <pre> - * <plugin> - * <groupId>org.apache.maven.plugins</groupId> - * <artifactId>maven-eclipse-plugin</artifactId> - * <configuration> - * <additionalConfig> - * <file> - * <name>.checkstyle</name> - * <url>http://some.place.org/path/to/file</url> - * </file> - * </additionalConfig> - * </configuration> - * </pre> - * - * or a location : - * - * <pre> - * <plugin> - * <groupId>org.apache.maven.plugins</groupId> - * <artifactId>maven-eclipse-plugin</artifactId> - * <configuration> - * <additionalConfig> - * <file> - * <name>.checkstyle</name> - * <location>/checkstyle-config.xml</location> - * </file> - * </additionalConfig> - * </configuration> - * <dependencies> - * <!-- The file defined in the location is stored in this dependency --> - * <dependency> - * <groupId>eclipsetest</groupId> - * <artifactId>checkstyle-config</artifactId> - * <version>1.0</version> - * </dependency> - * </dependencies> - * </plugin> - * </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 - } -} diff --git a/maven-plugins/tags/tuscany-bundle-plugin-1.0.8/src/main/java/org/apache/tuscany/maven/plugin/eclipse/EclipseProjectWriter.java b/maven-plugins/tags/tuscany-bundle-plugin-1.0.8/src/main/java/org/apache/tuscany/maven/plugin/eclipse/EclipseProjectWriter.java deleted file mode 100644 index 14d8a8becd..0000000000 --- a/maven-plugins/tags/tuscany-bundle-plugin-1.0.8/src/main/java/org/apache/tuscany/maven/plugin/eclipse/EclipseProjectWriter.java +++ /dev/null @@ -1,357 +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.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStreamReader; -import java.io.OutputStreamWriter; -import java.io.Reader; -import java.io.Writer; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Set; - -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.Messages; -import org.apache.maven.plugin.eclipse.writers.AbstractEclipseWriter; -import org.apache.maven.plugin.ide.IdeDependency; -import org.apache.maven.plugin.ide.IdeUtils; -import org.codehaus.plexus.util.IOUtil; -import org.codehaus.plexus.util.xml.PrettyPrintXMLWriter; -import org.codehaus.plexus.util.xml.XMLWriter; -import org.codehaus.plexus.util.xml.Xpp3Dom; -import org.codehaus.plexus.util.xml.Xpp3DomBuilder; -import org.codehaus.plexus.util.xml.pull.XmlPullParserException; - -/** - * Writes eclipse .project file. - * - * @author <a href="mailto:trygvis@inamo.no">Trygve Laugstøl</a> - * @author <a href="mailto:kenney@neonics.com">Kenney Westerhof</a> - * @author <a href="mailto:fgiust@apache.org">Fabrizio Giustina</a> - * @version $Id: EclipseProjectWriter.java 728546 2008-12-21 22:56:51Z bentmann $ - */ -public class EclipseProjectWriter - extends AbstractEclipseWriter -{ - private static final String ELT_NAME = "name"; //$NON-NLS-1$ - - private static final String ELT_BUILD_COMMAND = "buildCommand"; //$NON-NLS-1$ - - private static final String ELT_BUILD_SPEC = "buildSpec"; //$NON-NLS-1$ - - private static final String ELT_NATURE = "nature"; //$NON-NLS-1$ - - private static final String ELT_NATURES = "natures"; //$NON-NLS-1$ - - private static final String FILE_DOT_PROJECT = ".project"; //$NON-NLS-1$ - - /** - * Constant for links to files. - */ - private static final int LINK_TYPE_FILE = 1; - - /** - * Constant for links to directories. - */ - private static final int LINK_TYPE_DIRECTORY = 2; - - /** - * @see org.apache.tuscany.sca.maven.plugin.eclipse.writers.EclipseWriter#write() - */ - public void write() - throws MojoExecutionException - { - - Set projectnatures = new LinkedHashSet(); - Set buildCommands = new LinkedHashSet(); - - File dotProject = new File( config.getEclipseProjectDirectory(), FILE_DOT_PROJECT ); - - if ( dotProject.exists() ) - { - - log.info( Messages.getString( "EclipsePlugin.keepexisting", dotProject.getAbsolutePath() ) ); //$NON-NLS-1$ - - // parse existing file in order to keep manually-added entries - Reader reader = null; - try - { - reader = new InputStreamReader( new FileInputStream( dotProject ), "UTF-8" ); - Xpp3Dom dom = Xpp3DomBuilder.build( reader ); - - Xpp3Dom naturesElement = dom.getChild( ELT_NATURES ); - if ( naturesElement != null ) - { - Xpp3Dom[] existingNatures = naturesElement.getChildren( ELT_NATURE ); - for ( int j = 0; j < existingNatures.length; j++ ) - { - // adds all the existing natures - projectnatures.add( existingNatures[j].getValue() ); - } - } - - Xpp3Dom buildSpec = dom.getChild( ELT_BUILD_SPEC ); - if ( buildSpec != null ) - { - Xpp3Dom[] existingBuildCommands = buildSpec.getChildren( ELT_BUILD_COMMAND ); - for ( int j = 0; j < existingBuildCommands.length; j++ ) - { - Xpp3Dom buildCommandName = existingBuildCommands[j].getChild( ELT_NAME ); - if ( buildCommandName != null ) - { - buildCommands.add( new BuildCommand( existingBuildCommands[j] ) ); - } - } - } - } - catch ( XmlPullParserException e ) - { - log.warn( Messages.getString( "EclipsePlugin.cantparseexisting", dotProject.getAbsolutePath() ) ); //$NON-NLS-1$ - } - catch ( IOException e ) - { - log.warn( Messages.getString( "EclipsePlugin.cantparseexisting", dotProject.getAbsolutePath() ) ); //$NON-NLS-1$ - } - finally - { - IOUtil.close( reader ); - } - } - - // adds new entries after the existing ones - for ( Iterator iter = config.getProjectnatures().iterator(); iter.hasNext(); ) - { - projectnatures.add( iter.next() ); - } - - for ( Iterator iter = config.getBuildCommands().iterator(); iter.hasNext(); ) - { - buildCommands.add( (BuildCommand) iter.next() ); - } - - Writer w; - - try - { - w = new OutputStreamWriter( new FileOutputStream( dotProject ), "UTF-8" ); - } - catch ( IOException ex ) - { - throw new MojoExecutionException( Messages.getString( "EclipsePlugin.erroropeningfile" ), ex ); //$NON-NLS-1$ - } - - XMLWriter writer = new PrettyPrintXMLWriter( w ); - - writer.startElement( "projectDescription" ); //$NON-NLS-1$ - - writer.startElement( ELT_NAME ); - writer.writeText( config.getEclipseProjectName() ); - writer.endElement(); - - // TODO: this entire element might be dropped if the comment is null. - // but as the maven1 eclipse plugin does it, it's better to be safe than sorry - // A eclipse developer might want to look at this. - writer.startElement( "comment" ); //$NON-NLS-1$ - - if ( config.getProject().getDescription() != null ) - { - writer.writeText( config.getProject().getDescription() ); - } - - writer.endElement(); - - writer.startElement( "projects" ); //$NON-NLS-1$ - - // referenced projects should not be added for plugins - if ( !config.isPde() ) - { - List duplicates = new ArrayList(); - for ( int j = 0; j < config.getDepsOrdered().length; j++ ) - { - IdeDependency dep = config.getDepsOrdered()[j]; - // Avoid duplicates entries when same project is refered using multiple types - // (ejb, test-jar ...) - if ( dep.isReferencedProject() && !duplicates.contains( dep.getEclipseProjectName() ) ) - { - writer.startElement( "project" ); //$NON-NLS-1$ - writer.writeText( dep.getEclipseProjectName() ); - writer.endElement(); - duplicates.add( dep.getEclipseProjectName() ); - } - } - } - - writer.endElement(); // projects - - writer.startElement( ELT_BUILD_SPEC ); - - for ( Iterator it = buildCommands.iterator(); it.hasNext(); ) - { - ( (BuildCommand) it.next() ).print( writer ); - } - - writer.endElement(); // buildSpec - - writer.startElement( ELT_NATURES ); - - for ( Iterator it = projectnatures.iterator(); it.hasNext(); ) - { - writer.startElement( ELT_NATURE ); - writer.writeText( (String) it.next() ); - writer.endElement(); // name - } - - writer.endElement(); // natures - - /* - boolean addLinks = !config.getProjectBaseDir().equals( config.getEclipseProjectDirectory() ); - - if ( addLinks || ( config.isPde() && config.getDepsOrdered().length > 0 ) ) - { - writer.startElement( "linkedResources" ); //$NON-NLS-1$ - - if ( addLinks ) - { - - addFileLink( writer, config.getProjectBaseDir(), config.getEclipseProjectDirectory(), - config.getProject().getFile() ); - - addSourceLinks( writer, config.getProjectBaseDir(), config.getEclipseProjectDirectory(), - config.getProject().getCompileSourceRoots() ); - addResourceLinks( writer, config.getProjectBaseDir(), config.getEclipseProjectDirectory(), - config.getProject().getBuild().getResources() ); - - addSourceLinks( writer, config.getProjectBaseDir(), config.getEclipseProjectDirectory(), - config.getProject().getTestCompileSourceRoots() ); - addResourceLinks( writer, config.getProjectBaseDir(), config.getEclipseProjectDirectory(), - config.getProject().getBuild().getTestResources() ); - - } - - if ( config.isPde() ) - { - for ( int j = 0; j < config.getDepsOrdered().length; j++ ) - { - IdeDependency dep = config.getDepsOrdered()[j]; - - if ( dep.isAddedToClasspath() && !dep.isProvided() && !dep.isReferencedProject() && - !dep.isTestDependency() && !dep.isOsgiBundle() ) - { - String name = dep.getFile().getName(); - addLink( writer, name, StringUtils.replace( IdeUtils.getCanonicalPath( dep.getFile() ), "\\", - "/" ), LINK_TYPE_FILE ); - } - } - } - - writer.endElement(); // linkedResources - } - */ - - writer.endElement(); // projectDescription - - IOUtil.close( w ); - } - - private void addFileLink( XMLWriter writer, File projectBaseDir, File basedir, File file ) - throws MojoExecutionException - { - if ( file.isFile() ) - { - String name = IdeUtils.toRelativeAndFixSeparator( projectBaseDir, file, true ); - String location = IdeUtils.getCanonicalPath( file ).replaceAll( "\\\\", "/" ); //$NON-NLS-1$ //$NON-NLS-2$ - - addLink( writer, name, location, LINK_TYPE_FILE ); - } - else - { - log.warn( Messages.getString( "EclipseProjectWriter.notafile", file ) ); //$NON-NLS-1$ - } - } - - private void addSourceLinks( XMLWriter writer, File projectBaseDir, File basedir, List sourceRoots ) - throws MojoExecutionException - { - for ( Iterator it = sourceRoots.iterator(); it.hasNext(); ) - { - String sourceRootString = (String) it.next(); - File sourceRoot = new File( sourceRootString ); - - if ( sourceRoot.isDirectory() ) - { - String name = IdeUtils.toRelativeAndFixSeparator( projectBaseDir, sourceRoot, true ); - String location = IdeUtils.getCanonicalPath( sourceRoot ).replaceAll( "\\\\", "/" ); //$NON-NLS-1$ //$NON-NLS-2$ - - addLink( writer, name, location, LINK_TYPE_DIRECTORY ); - } - } - } - - private void addResourceLinks( XMLWriter writer, File projectBaseDir, File basedir, List sourceRoots ) - throws MojoExecutionException - { - for ( Iterator it = sourceRoots.iterator(); it.hasNext(); ) - { - String resourceDirString = ( (Resource) it.next() ).getDirectory(); - File resourceDir = new File( resourceDirString ); - - if ( resourceDir.isDirectory() ) - { - String name = IdeUtils.toRelativeAndFixSeparator( projectBaseDir, resourceDir, true ); - String location = IdeUtils.getCanonicalPath( resourceDir ).replaceAll( "\\\\", "/" ); //$NON-NLS-1$ //$NON-NLS-2$ - - addLink( writer, name, location, LINK_TYPE_DIRECTORY ); - } - } - } - - /** - * @param writer - * @param name - * @param location - */ - private void addLink( XMLWriter writer, String name, String location, int type ) - { - writer.startElement( "link" ); //$NON-NLS-1$ - - writer.startElement( ELT_NAME ); - writer.writeText( name ); - writer.endElement(); // name - - writer.startElement( "type" ); //$NON-NLS-1$ - writer.writeText( Integer.toString( type ) ); - writer.endElement(); // type - - writer.startElement( "location" ); //$NON-NLS-1$ - - writer.writeText( location ); - - writer.endElement(); // location - - writer.endElement(); // link - } -} diff --git a/maven-plugins/tags/tuscany-bundle-plugin-1.0.8/src/main/java/org/apache/tuscany/maven/plugin/eclipse/Messages.java b/maven-plugins/tags/tuscany-bundle-plugin-1.0.8/src/main/java/org/apache/tuscany/maven/plugin/eclipse/Messages.java deleted file mode 100644 index 5916f50f80..0000000000 --- a/maven-plugins/tags/tuscany-bundle-plugin-1.0.8/src/main/java/org/apache/tuscany/maven/plugin/eclipse/Messages.java +++ /dev/null @@ -1,68 +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.text.MessageFormat; -import java.util.MissingResourceException; -import java.util.ResourceBundle; - -/** - * @author <a href="mailto:fgiust@users.sourceforge.net">Fabrizio Giustina</a> - * @version $Id: Messages.java 728546 2008-12-21 22:56:51Z bentmann $ - */ -public class Messages -{ - - private static final String BUNDLE_NAME = "org.apache.tuscany.maven.plugin.eclipse.messages"; //$NON-NLS-1$ - - private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle.getBundle( BUNDLE_NAME ); - - private Messages() - { - } - - public static String getString( String key ) - { - try - { - return RESOURCE_BUNDLE.getString( key ); - } - catch ( MissingResourceException e ) - { - return '!' + key + '!'; - } - } - - public static String getString( String key, Object[] params ) - { - try - { - return MessageFormat.format( RESOURCE_BUNDLE.getString( key ), params ); - } - catch ( MissingResourceException e ) - { - return '!' + key + '!'; - } - } - - public static String getString( String key, Object param ) - { - return getString( key, new Object[] { param } ); - } -} |