On 1/14/06, Arnaud HERITIER <[EMAIL PROTECTED]> wrote:
> Since you did this commit we cannot build the eclipse plugin.

Ouch!

>
> There are several problems in your code :
> - MavenConstants.PROXY_LOGINHOST, MavenConstants.PROXY_LOGINDOMAIN and
> HttpUtils.setMeterType( meterType ) don't exist

Come on! The two constants above have been renamed between 1.0.x and
1.1!! I have fixed this and the usage of the meter has been removed. I
don't think there is a way to address this in a maven 1.0 vs 1.1
compatiblity.

> - Your package is org.apache.maven.eclipse but your directory structure is
> org/maven/eclipse. Personaly, I prefer org.apache.maven.plugin.eclipse

Done. I still don't understand how maven was able to compile this in a
first place. I have the same structure on my local box and maven is
able to compile it. Next time I need to switch to a dev sandbox before
committing, I'll double check :p

> - The type org.apache.maven.project.Dependency cannot be resolved. You must
> add maven-model in your dependencies.

Done. There was no error with maven 1.0.2

>
> Can you fix these errors please ?

Done. Let me know if it still does not work.

Stéphane

> On 1/13/06, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote:
> >
> > Author: snicoll
> > Date: Fri Jan 13 14:40:30 2006
> > New Revision: 368890
> >
> > URL: http://svn.apache.org/viewcvs?rev=368890&view=rev
> > Log:
> > MPECLIPSE-60: Now trying to download java sources archives from the remote
> > repositories.
> >
> > Added:
> >     maven/maven-1/plugins/trunk/eclipse/src/main/
> >     maven/maven-1/plugins/trunk/eclipse/src/main/org/
> >     maven/maven-1/plugins/trunk/eclipse/src/main/org/maven/
> >     maven/maven-1/plugins/trunk/eclipse/src/main/org/maven/eclipse/
> >     
> > maven/maven-1/plugins/trunk/eclipse/src/main/org/maven/eclipse/JavaSourcesDownloader.java
> > (with props)
> > Modified:
> >     maven/maven-1/plugins/trunk/eclipse/plugin.jelly
> >     maven/maven-1/plugins/trunk/eclipse/plugin.properties
> >     maven/maven-1/plugins/trunk/eclipse/project.xml
> >     maven/maven-1/plugins/trunk/eclipse/xdocs/changes.xml
> >     maven/maven-1/plugins/trunk/eclipse/xdocs/index.xml
> >     maven/maven-1/plugins/trunk/eclipse/xdocs/properties.xml
> >
> > Modified: maven/maven-1/plugins/trunk/eclipse/plugin.jelly
> > URL:
> > http://svn.apache.org/viewcvs/maven/maven-1/plugins/trunk/eclipse/plugin.jelly?rev=368890&r1=368889&r2=368890&view=diff
> >
> > ==============================================================================
> > --- maven/maven-1/plugins/trunk/eclipse/plugin.jelly (original)
> > +++ maven/maven-1/plugins/trunk/eclipse/plugin.jelly Fri Jan 13 14:40:30
> > 2006
> > @@ -17,9 +17,14 @@
> >    */
> > -->
> > <project xmlns:j="jelly:core" xmlns:ant="jelly:ant"
> > xmlns:util="jelly:util" xmlns:define="jelly:define"
> > -  xmlns:maven="jelly:maven">
> > +  xmlns:maven="jelly:maven" xmlns:eclipse="eclipse">
> > +
> > +    <define:taglib uri="eclipse">
> > +      <define:jellybean
> > +        name="download-sources"
> > +        className="org.apache.maven.eclipse.JavaSourcesDownloader"
> > +        method="downloadJavaSources"/>
> >
> > -  <define:taglib uri="eclipse">
> >      <define:tag name="write-classpath-entry">
> >        <maven:param-check value="${groupId}" fail="true"
> > message="'groupId' must be specified" />
> >        <maven:param-check value="${artifactId}" fail="true"
> > message="'artifactId' must be specified" />
> > @@ -30,6 +35,17 @@
> >        <j:if test='${relativePathCheck == "X"}'>
> >          <j:set var="relativePath"
> > value="${groupId}/jars/${artifactId}-${version}.jar" />
> >        </j:if>
> > +
> > +      <!-- download the source from the remote repository if necessary
> > -->
> > +      <j:if test="${maven.eclipse.src.download}">
> > +        <eclipse:download-sources
> > +          project="${pom}"
> > +          groupId="${groupId}"
> > +          artifactId="${artifactId}"
> > +          version="${version}"
> > +        />
> > +      </j:if>
> > +
> >        <!--
> >          should be (m1 repo layout):
> >          ${groupId}/java-sources/${artifactId}-${version}-sources.jar
> >
> > Modified: maven/maven-1/plugins/trunk/eclipse/plugin.properties
> > URL:
> > http://svn.apache.org/viewcvs/maven/maven-1/plugins/trunk/eclipse/plugin.properties?rev=368890&r1=368889&r2=368890&view=diff
> >
> > ==============================================================================
> > --- maven/maven-1/plugins/trunk/eclipse/plugin.properties (original)
> > +++ maven/maven-1/plugins/trunk/eclipse/plugin.properties Fri Jan 13
> > 14:40:30 2006
> > @@ -26,5 +26,6 @@
> > maven.eclipse.goals = plugins
> > maven.gen.src=${maven.build.dir}/generated-sources
> > maven.eclipse.src.extension = zip
> > +maven.eclipse.src.download = true
> > maven.eclipse.resources.addtoclasspath=false
> > maven.eclipse.servletapilist=javax.servlet:servlet-api
> > ,servletapi:servletapi,geronimo-spec:geronimo-spec-servlet
> >
> > Modified: maven/maven-1/plugins/trunk/eclipse/project.xml
> > URL:
> > http://svn.apache.org/viewcvs/maven/maven-1/plugins/trunk/eclipse/project.xml?rev=368890&r1=368889&r2=368890&view=diff
> >
> > ==============================================================================
> > --- maven/maven-1/plugins/trunk/eclipse/project.xml (original)
> > +++ maven/maven-1/plugins/trunk/eclipse/project.xml Fri Jan 13 14:40:30
> > 2006
> > @@ -116,5 +116,47 @@
> >        </roles>
> >        <timezone>+1</timezone>
> >      </developer>
> > +    <developer>
> > +      <name>Stephane Nicoll</name>
> > +      <id>snicoll</id>
> > +      <email>[EMAIL PROTECTED]</email>
> > +      <organization>ASF</organization>
> > +      <roles>
> > +        <role>Java Developer</role>
> > +      </roles>
> > +      <timezone>+1</timezone>
> > +    </developer>
> >    </developers>
> > +  <dependencies>
> > +    <dependency>
> > +      <groupId>maven</groupId>
> > +      <artifactId>maven</artifactId>
> > +      <version>1.0.2</version>
> > +    </dependency>
> > +    <dependency>
> > +      <groupId>commons-logging</groupId>
> > +      <artifactId>commons-logging</artifactId>
> > +      <version>1.0.4</version>
> > +      <properties>
> > +        <comment>This library is already loaded by maven's core. Be
> > careful to use the same version number as in the core.</comment>
> > +      </properties>
> > +    </dependency>
> > +    <dependency>
> > +      <groupId>commons-lang</groupId>
> > +      <artifactId>commons-lang</artifactId>
> > +      <version>2.0</version>
> > +      <type>jar</type>
> > +      <properties>
> > +        <comment>This library is already loaded by maven's core. Be
> > careful to use the same version number as in the core.</comment>
> > +      </properties>
> > +    </dependency>
> > +    <dependency>
> > +      <groupId>commons-jelly</groupId>
> > +      <artifactId>commons-jelly</artifactId>
> > +      <version>1.0</version>
> > +      <properties>
> > +        <comment>This library is already loaded by maven's core. Be
> > careful to use the same version number as in the core.</comment>
> > +      </properties>
> > +    </dependency>
> > +  </dependencies>
> > </project>
> >
> > Added:
> > maven/maven-1/plugins/trunk/eclipse/src/main/org/maven/eclipse/JavaSourcesDownloader.java
> > URL:
> > http://svn.apache.org/viewcvs/maven/maven-1/plugins/trunk/eclipse/src/main/org/maven/eclipse/JavaSourcesDownloader.java?rev=368890&view=auto
> >
> > ==============================================================================
> > ---
> > maven/maven-1/plugins/trunk/eclipse/src/main/org/maven/eclipse/JavaSourcesDownloader.java
> > (added)
> > +++
> > maven/maven-1/plugins/trunk/eclipse/src/main/org/maven/eclipse/JavaSourcesDownloader.java
> > Fri Jan 13 14:40:30 2006
> > @@ -0,0 +1,279 @@
> > +package org.apache.maven.eclipse;
> > +
> > +import org.apache.commons.lang.StringUtils;
> > +import org.apache.commons.logging.Log;
> > +import org.apache.commons.logging.LogFactory;
> > +import org.apache.maven.AbstractMavenComponent;
> > +import org.apache.maven.MavenConstants;
> > +import org.apache.maven.project.Dependency;
> > +import org.apache.maven.project.Project;
> > +import org.apache.maven.util.HttpUtils;
> > +
> > +import java.io.File;
> > +import java.io.FileNotFoundException;
> > +import java.util.Iterator;
> > +
> > +/* ====================================================================
> > + *   Copyright 2001-2004 The Apache Software Foundation.
> > + *
> > + *   Licensed 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.
> > + * ====================================================================
> > + */
> > +
> > +/**
> > + * An helper class used to download java sources archives.
> > + *
> > + * @author <a href="[EMAIL PROTECTED]">Stephane Nicoll</a>
> > + * @version $Id$
> > + */
> > +public class JavaSourcesDownloader
> > +    extends AbstractMavenComponent
> > +{
> > +    private static final Log log = LogFactory.getLog(
> > JavaSourcesDownloader.class );
> > +
> > +    private Project project;
> > +
> > +    private String groupId;
> > +
> > +    private String artifactId;
> > +
> > +    private String version;
> > +
> > +
> > +    public void downloadJavaSources()
> > +        throws Exception
> > +    {
> > +        if (project == null) {
> > +            throw new NullPointerException("project should be set.");
> > +        }
> > +
> > +        if (groupId == null) {
> > +            throw new NullPointerException("groupId should be set.");
> > +        }
> > +
> > +        if (artifactId == null) {
> > +            throw new NullPointerException("artifactId should be set.");
> > +        }
> > +
> > +        if (version == null) {
> > +            throw new NullPointerException("version should be set.");
> > +        }
> > +
> > +        final String dependencyId = groupId + ":" + artifactId;
> > +        Dependency dependency = project.getDependency( dependencyId );
> > +        if ( dependency == null )
> > +        {
> > +            log.warn("Could not retrieve dependency object for[" +
> > dependencyId + "] - skipping" );
> > +            return;
> > +        }
> > +
> > +        String relativePath = buildRelativePath();
> > +        File localFile = new File( 
> > project.getContext().getMavenRepoLocal(),
> > relativePath );
> > +        if ( isSnapshot() )
> > +        {
> > +            getRemoteArtifact( localFile, relativePath, dependency );
> > +        }
> > +        else
> > +        {
> > +            if ( localFile.exists() )
> > +            {
> > +                log.debug( "source for[" + groupId + ":" + artifactId +
> > ":" + version +
> > +                    "] is available in the local repository." );
> > +                return;
> > +            }
> > +            else
> > +            {
> > +                // download it
> > +                getRemoteArtifact( localFile, relativePath, dependency );
> > +            }
> > +        }
> > +    }
> > +
> > +    private String buildRelativePath()
> > +    {
> > +        StringBuffer sb = new StringBuffer();
> > +        sb.append( groupId ).append( "/java-sources/" ).append(
> > artifactId ).append( "-" ).append( version ).append(
> > +            "-sources.jar" );
> > +        return sb.toString();
> > +    }
> > +
> > +    private boolean isSnapshot()
> > +    {
> > +        return version.endsWith( "SNAPSHOT" );
> > +    }
> > +
> > +    // Getters & Setters
> > +
> > +
> > +    public Project getProject()
> > +    {
> > +        return project;
> > +    }
> > +
> > +    public void setProject( final Project project )
> > +    {
> > +        this.project = project;
> > +    }
> > +
> > +    public String getGroupId()
> > +    {
> > +        return groupId;
> > +    }
> > +
> > +    public void setGroupId( final String groupId )
> > +    {
> > +        this.groupId = groupId;
> > +    }
> > +
> > +    public String getArtifactId()
> > +    {
> > +        return artifactId;
> > +    }
> > +
> > +    public void setArtifactId( final String artifactId )
> > +    {
> > +        this.artifactId = artifactId;
> > +    }
> > +
> > +    public String getVersion()
> > +    {
> > +        return version;
> > +    }
> > +
> > +    public void setVersion( final String version )
> > +    {
> > +        this.version = version;
> > +    }
> > +
> > +    // Taken from maven core code in order to mimic the current behavior
> > +
> > +    /**
> > +     * Retrieve a <code>remoteFile</code> from the maven remote
> > repositories
> > +     * and store it at <code>destinationFile</code>
> > +     *
> > +     * @param destinationFile the destination file in the local
> > repository
> > +     * @param relativePath    the relative path to the dependency
> > +     * @return true if the retrieval succeeds, false otherwise.
> > +     */
> > +    private boolean getRemoteArtifact( File destinationFile, String
> > relativePath, Dependency relatedDependency )
> > +    {
> > +
> > +        // The directory structure for the project this dependency
> > belongs to
> > +        // may not exists so attempt to create the project directory
> > structure
> > +        // before attempting to download the dependency.
> > +        File directory = destinationFile.getParentFile();
> > +
> > +        if ( !directory.exists() )
> > +        {
> > +            directory.mkdirs();
> > +        }
> > +
> > +        log.info( "Attempting to download sources for " +
> > relatedDependency.getArtifact());
> > +
> > +        boolean artifactFound = false;
> > +
> > +        for ( Iterator i =
> > getProject().getContext().getMavenRepoRemote().iterator(); i.hasNext(); )
> > +        {
> > +            String remoteRepo = (String) i.next();
> > +
> > +            if ( remoteRepo.endsWith( "/" ) )
> > +            {
> > +                remoteRepo = remoteRepo.substring( 0, remoteRepo.length()
> > - 1 );
> > +            }
> > +
> > +            // The username and password parameters are not being
> > +            // used here. Those are the "" parameters you see below.
> > +            String url = remoteRepo + "/" + relativePath;
> > +            url = StringUtils.replace( url, "//", "/" );
> > +
> > +            if ( !url.startsWith( "file" ) )
> > +            {
> > +                if ( url.startsWith( "https" ) )
> > +                {
> > +                    url = StringUtils.replace( url, "https:/", "https://";
> > );
> > +                }
> > +                else
> > +                {
> > +                    url = StringUtils.replace( url, "http:/", "http://";
> > );
> > +                }
> > +            }
> > +            log.debug("Trying to download source at " + url);
> > +
> > +            // Attempt to retrieve the artifact and set the checksum if
> > retrieval
> > +            // of the checksum file was successful.
> > +            try
> > +            {
> > +                String loginHost = (String)
> > getProject().getContext().getVariable( MavenConstants.PROXY_LOGINHOST );
> > +                String loginDomain = (String)
> > getProject().getContext().getVariable( MavenConstants.PROXY_LOGINDOMAIN );
> > +                String meterType = (String)
> > getProject().getContext().getVariable( MavenConstants.DOWNLOAD_METER );
> > +                if ( meterType != null )
> > +                {
> > +                    HttpUtils.setMeterType( meterType );
> > +                }
> > +                HttpUtils.getFile( url, destinationFile, false, true,
> > getProject().getContext().getProxyHost(),
> > +
> > getProject().getContext().getProxyPort(),
> > +
> > getProject().getContext().getProxyUserName(),
> > +
> > getProject().getContext().getProxyPassword(), loginHost, loginDomain, true
> > );
> > +
> > +                // Artifact was found, continue checking additional
> > remote repos (if any)
> > +                // in case there is a newer version (i.e. snapshots) in
> > another repo
> > +                artifactFound = true;
> > +
> > +                if ( !isSnapshot() )
> > +                {
> > +                    break;
> > +                }
> > +            }
> > +            catch ( FileNotFoundException e )
> > +            {
> > +                // Multiple repositories may exist, and if the file is
> > not found
> > +                // in just one of them, it's no problem, and we don't
> > want to
> > +                // even print out an error.
> > +                // if it's not found at all, artifactFound will be false,
> > and the
> > +                // build _will_ break, and the user will get an error
> > message
> > +                log.debug( "File not found on one of the repos", e );
> > +            }
> > +            catch ( Exception e )
> > +            {
> > +                // If there are additional remote repos, then ignore
> > exception
> > +                // as artifact may be found in another remote repo. If
> > there
> > +                // are no more remote repos to check and the artifact
> > wasn't found in
> > +                // a previous remote repo, then artifactFound is false
> > indicating
> > +                // that the artifact could not be found in any of the
> > remote repos
> > +                //
> > +                // arguably, we need to give the user better control
> > (another command-
> > +                // line switch perhaps) of what to do in this case? Maven
> > already has
> > +                // a command-line switch to work in offline mode, but
> > what about when
> > +                // one of two or more remote repos is unavailable? There
> > may be multiple
> > +                // remote repos for redundancy, in which case you
> > probably want the build
> > +                // to continue. There may however be multiple remote
> > repos because some
> > +                // artifacts are on one, and some are on another. In this
> > case, you may
> > +                // want the build to break.
> > +                //
> > +                // print a warning, in any case, so user catches on to
> > mistyped
> > +                // hostnames, or other snafus
> > +                // FIXME: localize this message
> > +                String[] parsedUrl = HttpUtils.parseUrl( url );
> > +                log.warn( "Error retrieving artifact from [" +
> > parsedUrl[2] + "]: " + e );
> > +                if ( parsedUrl[0] != null )
> > +                {
> > +                    log.debug( "Username was '" + parsedUrl[0] + "',
> > password hidden" );
> > +                }
> > +                log.debug( "Error details", e );
> > +            }
> > +        }
> > +
> > +        return artifactFound;
> > +    }
> > +
> > +}
> >
> > Propchange:
> > maven/maven-1/plugins/trunk/eclipse/src/main/org/maven/eclipse/JavaSourcesDownloader.java
> >
> > ------------------------------------------------------------------------------
> >     svn:eol-style = native
> >
> > Propchange:
> > maven/maven-1/plugins/trunk/eclipse/src/main/org/maven/eclipse/JavaSourcesDownloader.java
> >
> > ------------------------------------------------------------------------------
> >     svn:keywords = Author Date Id Revision
> >
> > Modified: maven/maven-1/plugins/trunk/eclipse/xdocs/changes.xml
> > URL:
> > http://svn.apache.org/viewcvs/maven/maven-1/plugins/trunk/eclipse/xdocs/changes.xml?rev=368890&r1=368889&r2=368890&view=diff
> >
> > ==============================================================================
> > --- maven/maven-1/plugins/trunk/eclipse/xdocs/changes.xml (original)
> > +++ maven/maven-1/plugins/trunk/eclipse/xdocs/changes.xml Fri Jan 13
> > 14:40:30 2006
> > @@ -23,6 +23,9 @@
> >      <author email="[EMAIL PROTECTED]">dIon Gillard</author>
> >    </properties>
> >    <body>
> > +    <release version="1.11" date="in SVN">
> > +      <action dev="snicoll" type="add" issue="MPECLIPSE-60">Now trying to
> > download java sources archives from the remote repositories.</action>
> > +    </release>
> >      <release version="1.10" date="2005-12-03">
> >        <action dev="carlos" type="fix">Moved test classpath before main so
> > test classpath resources override main ones</action>
> >        <action dev="epugh" type="fix"
> > issue="MPECLIPSE-68">eclipse:add-maven-repo doesn't update correct Eclipse
> > property file for Eclipse 3.x</action>
> >
> > Modified: maven/maven-1/plugins/trunk/eclipse/xdocs/index.xml
> > URL:
> > http://svn.apache.org/viewcvs/maven/maven-1/plugins/trunk/eclipse/xdocs/index.xml?rev=368890&r1=368889&r2=368890&view=diff
> >
> > ==============================================================================
> > --- maven/maven-1/plugins/trunk/eclipse/xdocs/index.xml (original)
> > +++ maven/maven-1/plugins/trunk/eclipse/xdocs/index.xml Fri Jan 13
> > 14:40:30 2006
> > @@ -75,14 +75,15 @@
> >        with debugging.
> >        </p>
> >        <p>
> > -      The plugin will check if the file located at
> > <code>MAVEN_REPO${groupId}/java-sources/${artifactId}-${version}-
> > sources.jar</code>
> > -      exists and will add it as a source attachment.
> > +      The plugin is able to download sources archive at
> > <code>${groupId}/java-sources/${artifactId}-${version}-sources.jar</code>
> > +      from the repository. This behavior can be disabled by configuring
> > the <code>maven.eclipse.src.download</code> property.
> >        As an example, the source archive for the dependency
> > <code>MAVEN_REPO/eclipse/<em>jars</em>/eclipse-ui-3.0.0
> > <em>.jar</em></code>
> >        will be mapped to
> > <code>MAVEN_REPO/eclipse/<em>java-sources</em>/eclipse-ui-3.0.0<em>-
> > sources.jar</em></code>
> >        </p>
> >        <p>
> >        For backward compatibility the plugin still accepts source archives
> > located at
> > -      <code>MAVEN_REPO/${groupId}/src/${artifactId}-${version}.${
> > maven.eclipse.src.extension}</code>.
> > +      <code>MAVEN_REPO/${groupId}/src/${artifactId}-${version}.${
> > maven.eclipse.src.extension}</code> but it won't
> > +      download them from the repository.
> >        </p>
> >        </subsection>
> >        <subsection name="Generated Source Code">
> >
> > Modified: maven/maven-1/plugins/trunk/eclipse/xdocs/properties.xml
> > URL:
> > http://svn.apache.org/viewcvs/maven/maven-1/plugins/trunk/eclipse/xdocs/properties.xml?rev=368890&r1=368889&r2=368890&view=diff
> >
> > ==============================================================================
> > --- maven/maven-1/plugins/trunk/eclipse/xdocs/properties.xml (original)
> > +++ maven/maven-1/plugins/trunk/eclipse/xdocs/properties.xml Fri Jan 13
> > 14:40:30 2006
> > @@ -135,6 +135,14 @@
> >
> > <code>MAVEN_REPO${groupId}/java-sources/${artifactId}-${version}-
> > sources.jar</code>
> >            </td>
> >          </tr>
> > +        <tr>
> > +          <td>maven.eclipse.src.downlad</td>
> > +          <td>Yes (default=<code>true</code>)</td>
> > +          <td>
> > +            Specify if java sources archives need to be downloaded from
> > the configured
> > +            remote repositories. Defaults to true.
> > +          </td>
> > +        </tr>
> >        </table>
> >        <p>
> >          Note that you will need to defined a <code>MAVEN_REPO</code> Java
> >
> >
> >
>
>


--
.::You're welcome ::.

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to