michal 2003/06/16 07:26:02 Added: src/plugins-build/artifact project.properties plugin.properties .cvsignore project.xml plugin.jelly src/plugins-build/artifact/src/main/org/apache/maven/artifact/deployer MavenAuthenticationInfo.java DefaultArtifactDeployer.java DeployBean.java ArtifactDeployer.java src/plugins-build/artifact/src/main/org/apache/maven/artifact/deployer/deploy SshDeployer.java HttpDeployer.java AbstractDeployer.java Deployer.java GenericAuthenticationInfo.java AuthenticationInfo.java FtpDeployer.java src/plugins-build/artifact/src/plugin-resources/templates manifest.vm Log: Generic code for: - deployment of artifact to remote repositry - installaton of artifact to local repository - manifest generation Revision Changes Path 1.1 maven/src/plugins-build/artifact/project.properties Index: project.properties =================================================================== # ------------------------------------------------------------------- # P R O J E C T P R O P E R T I E S # ------------------------------------------------------------------- 1.1 maven/src/plugins-build/artifact/plugin.properties Index: plugin.properties =================================================================== # ------------------------------------------------------------------- # P L U G I N P R O P E R T I E S # ------------------------------------------------------------------- maven.artifact.manifest.extensions.add=false maven.artifact.manifest.basedir=${plugin.dir}/plugin-resources/templates maven.artifact.manifest.template=manifest.vm 1.1 maven/src/plugins-build/artifact/.cvsignore Index: .cvsignore =================================================================== target velocity.log maven.log 1.1 maven/src/plugins-build/artifact/project.xml Index: project.xml =================================================================== <?xml version="1.0" encoding="UTF-8"?> <project> <extend>${basedir}/../project.xml</extend> <pomVersion>3</pomVersion> <id>maven-artifact-plugin</id> <name>Maven Artifact Plug-in</name> <currentVersion>1.0</currentVersion> <description/> <shortDescription>Java Project Management Tools</shortDescription> <url>http://maven.apache.org/reference/plugins/artifact/</url> <siteDirectory>/www/maven.apache.org/reference/plugins/artifact/</siteDirectory> <repository> <connection>scm:cvs:pserver:[EMAIL PROTECTED]:/home/cvspublic:maven/src/plugins-build/artifact/</connection> <url>http://cvs.apache.org/viewcvs/maven/src/plugins-build/artifact/</url> </repository> <developers/> <dependencies> <dependency> <groupId>maven</groupId> <artifactId>maven</artifactId> <version>SNAPSHOT</version> <type>jar</type> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>20030203.000550</version> <type>jar</type> </dependency> <dependency> <groupId>commons-net</groupId> <artifactId>commons-net</artifactId> <version>1.0.0</version> <type>jar</type> </dependency> <dependency> <groupId>commons-httpclient</groupId> <artifactId>commons-httpclient</artifactId> <version>2.0-beta1</version> <type>jar</type> </dependency> <dependency> <groupId>jsch</groupId> <artifactId>jsch</artifactId> <version>0.0.9</version> <type>jar</type> </dependency> <dependency> <groupId>commons-jelly</groupId> <artifactId>commons-jelly</artifactId> <version>20030310.073407</version> <url>http://jakarta.apache.org/commons/jelly/</url> <type>jar</type> </dependency> <dependency> <groupId>commons-jelly</groupId> <artifactId>commons-jelly-tags-velocity</artifactId> <version>20030303.205659</version> <type>jar</type> </dependency> <dependency> <groupId>velocity</groupId> <artifactId>velocity</artifactId> <version>1.3</version> <type>jar</type> </dependency> </dependencies> </project> 1.1 maven/src/plugins-build/artifact/plugin.jelly Index: plugin.jelly =================================================================== <?xml version="1.0"?> <project xmlns:j="jelly:core" xmlns:define="jelly:define" xmlns:ant="jelly:ant" xmlns:velocity="jelly:velocity" > <define:taglib uri="artifact"> <!-- For times the same bean is used. --> <define:jellybean name="install" method="install" className="org.apache.maven.artifact.deployer.DeployBean"/> <define:jellybean name="install-snapshot" method="installSnapshot" className="org.apache.maven.artifact.deployer.DeployBean"/> <define:jellybean name="deploy" method="deploy" className="org.apache.maven.artifact.deployer.DeployBean"/> <define:jellybean name="deploy-snapshot" method="deploySnapshot" className="org.apache.maven.artifact.deployer.DeployBean"/> <!-- | | @filename | @templateBasedir | @template | | | --> <define:tag name="manifest-file"> <j:if test="${templateBasedir == null}"> <j:set var="templateBasedir" value="${pom.getPluginContext('maven-artifact-plugin').getVariable('maven.artifact.manifest.basedir')}"/> </j:if> <j:if test="${template == null}"> <j:set var="template" value="${pom.getPluginContext('maven-artifact-plugin').getVariable('maven.artifact.manifest.template')}"/> </j:if> <j:set var="mainclass" value="${pom.getPluginContext('maven-artifact-plugin').getVariable('maven.artifact.manifest.mainclass')}"/> <j:set var="addExtensions" value="${pom.getPluginContext('maven-artifact-plugin').getVariable('maven.artifact.manifest.extensions.add')}"/> <ant:echo>Creating MANIFEST file:${filename}</ant:echo> <ant:echo>Mainclass: ${mainclass}</ant:echo> <ant:echo>addExtensions ${addExtensions}</ant:echo> <velocity:merge name="${filename}" basedir="${templateBasedir}" template="${template}"/> </define:tag> </define:taglib> <goal name="artifact:load"> </goal> </project> 1.1 maven/src/plugins-build/artifact/src/main/org/apache/maven/artifact/deployer/MavenAuthenticationInfo.java Index: MavenAuthenticationInfo.java =================================================================== package org.apache.maven.artifact.deployer; /* ==================================================================== * The Apache Software License, Version 1.1 * * Copyright (c) 2001 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, * if any, must include the following acknowledgment: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowledgment may appear in the software itself, * if and wherever such third-party acknowledgments normally appear. * * 4. The names "Apache" and "Apache Software Foundation" and * "Apache MavenSession" must not be used to endorse or promote products * derived from this software without prior written permission. For * written permission, please contact [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache", * "Apache MavenSession", nor may "Apache" appear in their name, without * prior written permission of the Apache Software Foundation. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. * * ==================================================================== */ import org.apache.maven.project.Project; import org.apache.maven.artifact.deployer.deploy.GenericAuthenticationInfo; /** * * Maps information kept in POM to AuthetificationInfo interface * <br/> * * * * @author <a href="[EMAIL PROTECTED]">Michal Maczka</a> * @version $Id: MavenAuthenticationInfo.java,v 1.1 2003/06/16 14:26:01 michal Exp $ */ public class MavenAuthenticationInfo extends GenericAuthenticationInfo { public MavenAuthenticationInfo(Project project) { String username = (String) project.getContext().getVariable( "maven.deployer.username"); String password = (String) project.getContext().getVariable( "maven.deployer.password"); String passphrase = (String) project.getContext().getVariable( "maven.deployer.passphrase"); setUsername(username); setPassword(password); setPassphrase(passphrase); } } 1.1 maven/src/plugins-build/artifact/src/main/org/apache/maven/artifact/deployer/DefaultArtifactDeployer.java Index: DefaultArtifactDeployer.java =================================================================== package org.apache.maven.artifact.deployer; /* ==================================================================== * The Apache Software License, Version 1.1 * * Copyright (c) 2001 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, * if any, must include the following acknowledgment: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowledgment may appear in the software itself, * if and wherever such third-party acknowledgments normally appear. * * 4. The names "Apache" and "Apache Software Foundation" and * "Apache MavenSession" must not be used to endorse or promote products * derived from this software without prior written permission. For * written permission, please contact [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache", * "Apache MavenSession", nor may "Apache" appear in their name, without * prior written permission of the Apache Software Foundation. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. * * ==================================================================== */ import java.io.File; import java.io.IOException; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; import org.apache.commons.io.FileUtils; import org.apache.maven.MavenConstants; import org.apache.maven.MavenException; import org.apache.maven.artifact.deployer.deploy.Deployer; import org.apache.maven.artifact.deployer.deploy.FtpDeployer; import org.apache.maven.artifact.deployer.deploy.HttpDeployer; import org.apache.maven.artifact.deployer.deploy.SshDeployer; import org.apache.maven.project.Project; /** * * Default implemenataion of Artifact Deployer interface * * @author <a href="[EMAIL PROTECTED]">Michal Maczka</a> * @version $Id: DefaultArtifactDeployer.java,v 1.1 2003/06/16 14:26:01 michal Exp $ */ public class DefaultArtifactDeployer implements ArtifactDeployer { /** * */ public final static DateFormat SNAPSHOT_MARKER = new SimpleDateFormat("yyyyMMdd.HHmmss"); /** * @see ArtifactDeployer#deploy(String, String, Project) */ public void deploy(String file, String type, Project project) throws MavenException { System.out.println("deploy"); doDeploy(file, type, project, project.getCurrentVersion()); } /** * @see DefaultArtifactDeployer#deploySnapshot(String, String, Project) */ public void deploySnapshot(String file, String type, Project project) throws MavenException { doDeploy(file, type, project, MavenConstants.SNAPSHOT_SIGNIFIER); } /** * @see ArtifactDeployer#install(String, String, Project) */ public void install(String artifact, String type, Project project) throws MavenException { doInstall(artifact, type, project, project.getCurrentVersion()); } /** * @see ArtifactDeployer#installSnapshot(String, String, Project) */ public void installSnapshot(String artifact, String type, Project project) throws MavenException { System.out.println("Installing snapshot of:'" + artifact + "''"); try { doInstall( artifact, type, project, MavenConstants.SNAPSHOT_SIGNIFIER); } catch (MavenException e) { System.out.println(e.getMessage()); } try { doInstall(artifact, type, project, getSnapshotVersion()); } catch (MavenException e) { System.out.println(e.getMessage()); } } /** * Istall given file in repsoitory * @param artifact the artifact file to insatall * @param type The type of the artiafct * @param project * @param version String denominating the version of the artifact * @throws MavenException */ private void doInstall( String artifact, String type, Project project, String version) throws MavenException { String repositoryPath = getRepositoryPath(type, project, version); try { String dest = getLocalRepository(project) + "/" + repositoryPath; System.out.println( "Copying: from '" + artifact + "' to: '" + dest + "'"); FileUtils.copyFile(new File(artifact), new File(dest)); } catch (IOException e) { String msg = "Cannot install file: '" + repositoryPath + "'. Reason: " + e.getMessage(); throw new MavenException(msg); } } /** * @param artifact * @param type * @param project * @param snapshot */ private void doDeploy( String artifact, String type, Project project, String version) throws MavenException { String repoPath = getRepositoryPath(type, project, version); String host = getDistributionHost(project); String remotePath = getDistributionDirectory(project) + "/" + repoPath; Deployer deployer = getDeployer(host); //Cut of protcol prefix from host name host = host.substring( host.indexOf("://") + 3 ); System.out.println( "Deploying: '" + artifact + "' to host: '" + host + "' remote path: '" + remotePath); MavenAuthenticationInfo authInfo = new MavenAuthenticationInfo(project); deployer.deploy(authInfo, host, artifact, remotePath); System.out.println("Deployment finished"); } /** * @param project * @return */ private String getDistributionHost(Project project) throws MavenException { String host = host = project.getDistributionSite(); if (host == null || host.length() == 0) { host = (String) project.getContext().getVariable( "maven.deployer.host"); } if (host == null) { throw new MavenException("Distribution host is not set"); } return host; } /** * * @param project * @return * @throws MavenException */ private String getDistributionDirectory(Project project) throws MavenException { String dir = project.getDistributionDirectory(); if (dir == null || dir.length() == 0) { dir = (String) project.getContext().getVariable( "maven.deployer.remote.directory"); } if (dir == null) { throw new MavenException("Distribution directory is not set"); } return dir; } /** * * @param project */ private String getLocalRepository(Project project) { return project.getContext().getMavenRepoLocal(); } /** * * @param type * @param project * @param snapshot * @return */ private String getRepositoryPath( String type, Project project, String version) { StringBuffer path = new StringBuffer(); path.append(project.getArtifactDirectory()); path.append("/"); path.append(type + "s"); path.append("/"); path.append(project.getArtifactId()); path.append("-"); path.append(version); path.append("."); path.append(extensionForType(type)); return path.toString(); } /** * * @return */ private String getSnapshotVersion() { Date date = new Date(); return SNAPSHOT_MARKER.format(date); } /** * * @todo Dirty hack util Repository Layout Service is used * @return */ private String extensionForType(String type) { if (type.equals("ejb")) { return "jar"; } return type; } /** * * @param host * @param project * @return * @throws MavenException */ private Deployer getDeployer(String host) throws MavenException { Deployer deployer = null; if (host.startsWith("http://")) { deployer = new HttpDeployer(); } else if (host.startsWith("ssh://")) { deployer = new SshDeployer(); } else if (host.startsWith("ftp://")) { deployer = new FtpDeployer(); } else { throw new MavenException( "unsupported protocol: '" + host + "'"); } return deployer; } } 1.1 maven/src/plugins-build/artifact/src/main/org/apache/maven/artifact/deployer/DeployBean.java Index: DeployBean.java =================================================================== package org.apache.maven.artifact.deployer; /* ==================================================================== * The Apache Software License, Version 1.1 * * Copyright (c) 2001 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, * if any, must include the following acknowledgment: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowledgment may appear in the software itself, * if and wherever such third-party acknowledgments normally appear. * * 4. The names "Apache" and "Apache Software Foundation" and * "Apache MavenSession" must not be used to endorse or promote products * derived from this software without prior written permission. For * written permission, please contact [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache", * "Apache MavenSession", nor may "Apache" appear in their name, without * prior written permission of the Apache Software Foundation. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. * * ==================================================================== */ import org.apache.maven.MavenException; import org.apache.maven.artifact.deployer.ArtifactDeployer; import org.apache.maven.artifact.deployer.DefaultArtifactDeployer; import org.apache.maven.project.Project; /** * * The Bean which serves as Proxy for Jelly scripts To Artifact Deployement API * * @author <a href="[EMAIL PROTECTED]">Michal Maczka</a> * @version $Id: DeployBean.java,v 1.1 2003/06/16 14:26:01 michal Exp $ */ public class DeployBean { ArtifactDeployer artifactDeployer = null; private Project project = null; private String artifact = null; private String type = null; public DeployBean() { artifactDeployer = new DefaultArtifactDeployer(); } /** * @return */ public String getArtifact() { return artifact; } /** * @param artifact */ public void setArtifact(String artifact) { this.artifact = artifact; } /** * @return */ public Project getProject() { return project; } /** * @param project */ public void setProject(Project project) { this.project = project; } /** * @return */ public String getType() { return type; } /** * @param type */ public void setType(String type) { this.type = type; } /** * * @throws MavenException */ protected void checkAttributes() throws MavenException { if (project == null) { throw new MavenException("attribute 'project' is required"); } if (artifact == null) { throw new MavenException("attribute 'artifact' is required"); } if (type == null) { throw new MavenException("attribute 'type' is required"); } } /** * */ public void deploy() throws MavenException { System.out.println("deploy called"); checkAttributes(); artifactDeployer.deploy(artifact, type, project); } /** * */ public void deploySnapshot() throws MavenException { checkAttributes(); artifactDeployer.deploySnapshot(artifact, type, project); } /** * */ public void install() throws MavenException { checkAttributes(); artifactDeployer.install(artifact, type, project); } /** * */ public void installSnapshot() throws MavenException { checkAttributes(); artifactDeployer.installSnapshot(artifact, type, project); } } 1.1 maven/src/plugins-build/artifact/src/main/org/apache/maven/artifact/deployer/ArtifactDeployer.java Index: ArtifactDeployer.java =================================================================== package org.apache.maven.artifact.deployer; /* ==================================================================== * The Apache Software License, Version 1.1 * * Copyright (c) 2001 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, * if any, must include the following acknowledgment: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowledgment may appear in the software itself, * if and wherever such third-party acknowledgments normally appear. * * 4. The names "Apache" and "Apache Software Foundation" and * "Apache MavenSession" must not be used to endorse or promote products * derived from this software without prior written permission. For * written permission, please contact [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache", * "Apache MavenSession", nor may "Apache" appear in their name, without * prior written permission of the Apache Software Foundation. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. * * ==================================================================== */ import org.apache.maven.MavenException; import org.apache.maven.project.Project; /** * * The Bean which serves as Proxy To Hibernate API * <br/> * * * * @author <a href="[EMAIL PROTECTED]">Michal Maczka</a> * @version $Id: ArtifactDeployer.java,v 1.1 2003/06/16 14:26:01 michal Exp $ */ public interface ArtifactDeployer { /** * Deploy given artifact to remote repository * @param artifact * @param type * @param project * @throws MavenException */ public void deploy(String artifact, String type, Project project) throws MavenException; /** * Deploy given artifact as a snapshot to remote repository * @param artifact * @param type * @param project * @throws MavenException */ public void deploySnapshot(String artifact, String type, Project project) throws MavenException; /** * Install given artifact in local repository * @param artifact * @param type * @param project * @throws MavenException */ public void install(String artifact, String type, Project project) throws MavenException; /** * Install given artifact as snapshot in local repository * @param artifact * @param type * @param project * @throws MavenException */ public void installSnapshot(String artifact, String type, Project project) throws MavenException; } 1.1 maven/src/plugins-build/artifact/src/main/org/apache/maven/artifact/deployer/deploy/SshDeployer.java Index: SshDeployer.java =================================================================== package org.apache.maven.artifact.deployer.deploy; /* ==================================================================== * The Apache Software License, Version 1.1 * * Copyright (c) 2001 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, * if any, must include the following acknowledgment: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowledgment may appear in the software itself, * if and wherever such third-party acknowledgments normally appear. * * 4. The names "Apache" and "Apache Software Foundation" and * "Apache MavenSession" must not be used to endorse or promote products * derived from this software without prior written permission. For * written permission, please contact [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache", * "Apache MavenSession", nor may "Apache" appear in their name, without * prior written permission of the Apache Software Foundation. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. * * ==================================================================== */ import com.jcraft.jsch.JSch; import com.jcraft.jsch.UserInfo; import com.jcraft.jsch.ChannelExec; import com.jcraft.jsch.Session; import com.jcraft.jsch.Channel; import java.io.File; import java.io.FileInputStream; import java.io.PipedInputStream; import java.io.PipedOutputStream; /** * An ssh2 deployer that uses the JSch library and the JCE. We will first try to * use public keys for authentication and if that doesn't work then we fall back * to using the login and password of the user in question. NOTE: We are * assuming the standard port of 22. * * @author <a href="mailto:[EMAIL PROTECTED]">Jason van Zyl</a> * @version $Id: SshDeployer.java,v 1.1 2003/06/16 14:26:01 michal Exp $ * @todo still have to account for differing setups for people deploying to * their own sites and to the central repository. */ public class SshDeployer extends AbstractDeployer { private AuthenticationInfo authInfo = null; /** * @see Deployer#project */ public void deploy( AuthenticationInfo authInfo, String host, String localArtifactPath, String remoteArtifactPath) { try { this.authInfo = authInfo; JSch jsch = new JSch(); Session session = jsch.getSession(host, 22); // Look for the private key and use it if available. File privateKey = new File( new File(System.getProperty("user.home"), ".ssh"), "id_dsa"); if (privateKey.exists()) { session.setIdentity(privateKey.getPath()); } // username and password will be given via UserInfo interface. UserInfo ui = new MavenUserInfo(); session.setUserInfo(ui); session.connect(); // exec 'scp -t remoteArtifactPath' remotely String command = "scp -t " + remoteArtifactPath; Channel channel = session.openChannel("exec"); ((ChannelExec) channel).setCommand(command); // plug I/O streams for remote scp PipedOutputStream out = new PipedOutputStream(); channel.setInputStream(new PipedInputStream(out)); PipedInputStream in = new PipedInputStream(); channel.setOutputStream(new PipedOutputStream(in)); channel.connect(); byte[] tmp = new byte[1]; // wait for '\0' do { in.read(tmp, 0, 1); } while (tmp[0] != 0); // send "C0644 filesize filename", where filename should not include '/' int filesize = (int) (new File(localArtifactPath)).length(); command = "C0644 " + filesize + " "; if (localArtifactPath.lastIndexOf('/') > 0) { command += localArtifactPath.substring( localArtifactPath.lastIndexOf('/') + 1); } else { command += localArtifactPath; } command += "\n"; out.write(command.getBytes()); out.flush(); // wait for '\0' do { in.read(tmp, 0, 1); } while (tmp[0] != 0); // send a content of localArtifactPath FileInputStream fis = new FileInputStream(localArtifactPath); byte[] buf = new byte[1024]; while (true) { int len = fis.read(buf, 0, buf.length); if (len <= 0) { break; } out.write(buf, 0, len); out.flush(); } // send '\0' buf[0] = 0; out.write(buf, 0, 1); out.flush(); // wait for '\0' do { in.read(tmp, 0, 1); } while (tmp[0] != 0); } catch (Exception e) { System.out.println(e); } } /** * MavenUserInfo class which returns the necessary name and password from * the POM to secure an ssh connection. */ public class MavenUserInfo implements UserInfo { /** * Gets the name attribute of the MavenUserInfo object */ public String getName() { return authInfo.getUsername(); } /** * Gets the password attribute of the MavenUserInfo object */ public String getPassword() { return authInfo.getPassword(); } /** * Gets the passphrase attribute of the MavenUserInfo object */ public String getPassphrase(String message) { return authInfo.getPassphrase(); } /** * Required to satisfy UserInfo interface. Not used currently. */ public boolean promptNameAndPassphrase(String message) { return true; } /** * Required to satisfy UserInfo interface. Not used currently. */ public boolean promptNameAndPassword(String message) { return true; } /** * Required to satisfy UserInfo interface. Not used currently. */ public boolean retry() { return true; } /** * Required to satisfy UserInfo interface. Not used currently. */ public boolean prompt(String message) { return true; } } } 1.1 maven/src/plugins-build/artifact/src/main/org/apache/maven/artifact/deployer/deploy/HttpDeployer.java Index: HttpDeployer.java =================================================================== package org.apache.maven.artifact.deployer.deploy; /* ==================================================================== * The Apache Software License, Version 1.1 * * Copyright (c) 2001 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, * if any, must include the following acknowledgment: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowledgment may appear in the software itself, * if and wherever such third-party acknowledgments normally appear. * * 4. The names "Apache" and "Apache Software Foundation" and * "Apache MavenSession" must not be used to endorse or promote products * derived from this software without prior written permission. For * written permission, please contact [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache", * "Apache MavenSession", nor may "Apache" appear in their name, without * prior written permission of the Apache Software Foundation. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. * * ==================================================================== */ import java.io.File; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import org.apache.commons.httpclient.Credentials; import org.apache.commons.httpclient.Header; import org.apache.commons.httpclient.HostConfiguration; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpException; import org.apache.commons.httpclient.URI; import org.apache.commons.httpclient.URIException; import org.apache.commons.httpclient.UsernamePasswordCredentials; import org.apache.commons.httpclient.methods.PutMethod; /** * An HTTP deployer based the Commons HttpClient library. * * @author <a href="mailto:[EMAIL PROTECTED]">Jason van Zyl</a> * @version $Id: HttpDeployer.java,v 1.1 2003/06/16 14:26:01 michal Exp $ * * @todo still have to account for differing setups for people deploying to * their own sites and to the central repository. * * @todo deal with proxies * @todo deal with authentication */ public class HttpDeployer extends AbstractDeployer { /** * Description of the Method */ public void deploy( AuthenticationInfo authInfo, String host, String localPath, String remotePath) { URL url = null; try { url = new URL(remotePath); } catch (MalformedURLException murle) { } Credentials creds = new UsernamePasswordCredentials( authInfo.getUsername(), authInfo.getPassphrase()); //create a singular HttpClient object HttpClient client = new HttpClient(); //establish a connection within 5 seconds client.setConnectionTimeout(5000); //set username / password if (creds != null) { client.getState().setCredentials(null, creds); } // HostConfiguration hc = new HostConfiguration(); try { hc.setHost(new URI(url)); } catch (URIException e) { throw new RuntimeException(e.toString()); } //start a session with the webserver client.setHostConfiguration(hc); //create a method object PutMethod method = new PutMethod(url.getPath()); method.setRequestBody(new File(localPath).toString()); //turn follow redirects off method.setFollowRedirects(false); //turn strict mode on method.setStrictMode(false); //execute the method try { client.executeMethod(method); } catch (HttpException he) { System.err.println("Http error connecting to '" + url + "'"); System.err.println(he.getMessage()); System.exit(-4); } catch (IOException ioe) { System.err.println("Unable to connect to '" + url + "'"); System.exit(-3); } //get the request headers Header[] requestHeaders = method.getRequestHeaders(); //get the response headers Header[] responseHeaders = method.getResponseHeaders(); //get the response body byte[] responseBody = method.getResponseBody(); method.releaseConnection(); } } 1.1 maven/src/plugins-build/artifact/src/main/org/apache/maven/artifact/deployer/deploy/AbstractDeployer.java Index: AbstractDeployer.java =================================================================== package org.apache.maven.artifact.deployer.deploy; /* ==================================================================== * The Apache Software License, Version 1.1 * * Copyright (c) 2001 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, * if any, must include the following acknowledgment: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowledgment may appear in the software itself, * if and wherever such third-party acknowledgments normally appear. * * 4. The names "Apache" and "Apache Software Foundation" and * "Apache MavenSession" must not be used to endorse or promote products * derived from this software without prior written permission. For * written permission, please contact [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache", * "Apache MavenSession", nor may "Apache" appear in their name, without * prior written permission of the Apache Software Foundation. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. * * ==================================================================== */ /** * Base deployer from which all deployers are derived. * * @author <a href="mailto:[EMAIL PROTECTED]">Jason van Zyl</a> * @author <a href="mailto:[EMAIL PROTECTED]">Michal Maczka</a> * @version $Id: AbstractDeployer.java,v 1.1 2003/06/16 14:26:01 michal Exp $ */ public abstract class AbstractDeployer implements Deployer { /** * */ public abstract void deploy( AuthenticationInfo authInfo, String host, String localPath, String remotePath); } 1.1 maven/src/plugins-build/artifact/src/main/org/apache/maven/artifact/deployer/deploy/Deployer.java Index: Deployer.java =================================================================== package org.apache.maven.artifact.deployer.deploy; /* ==================================================================== * The Apache Software License, Version 1.1 * * Copyright (c) 2001 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, * if any, must include the following acknowledgment: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowledgment may appear in the software itself, * if and wherever such third-party acknowledgments normally appear. * * 4. The names "Apache" and "Apache Software Foundation" and * "Apache MavenSession" must not be used to endorse or promote products * derived from this software without prior written permission. For * written permission, please contact [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache", * "Apache MavenSession", nor may "Apache" appear in their name, without * prior written permission of the Apache Software Foundation. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. * * ==================================================================== */ /** * Interface for all Maven deployers. * * @author <a href="mailto:[EMAIL PROTECTED]">Jason van Zyl</a> * @version $Id: Deployer.java,v 1.1 2003/06/16 14:26:01 michal Exp $ */ public interface Deployer { /** * * @param authInfo * @param host * @param localPath * @param remotePath */ public void deploy( AuthenticationInfo authInfo, String host, String localPath, String remotePath); } 1.1 maven/src/plugins-build/artifact/src/main/org/apache/maven/artifact/deployer/deploy/GenericAuthenticationInfo.java Index: GenericAuthenticationInfo.java =================================================================== package org.apache.maven.artifact.deployer.deploy; /* ==================================================================== * The Apache Software License, Version 1.1 * * Copyright (c) 2001 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, * if any, must include the following acknowledgment: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowledgment may appear in the software itself, * if and wherever such third-party acknowledgments normally appear. * * 4. The names "Apache" and "Apache Software Foundation" and * "Apache MavenSession" must not be used to endorse or promote products * derived from this software without prior written permission. For * written permission, please contact [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache", * "Apache MavenSession", nor may "Apache" appear in their name, without * prior written permission of the Apache Software Foundation. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. * * ==================================================================== */ /** * * The Bean which serves as Proxy To Hibernate API * <br/> * * * * @author <a href="[EMAIL PROTECTED]">Michal Maczka</a> * @version $Id: GenericAuthenticationInfo.java,v 1.1 2003/06/16 14:26:01 michal Exp $ */ public class GenericAuthenticationInfo implements AuthenticationInfo { private String username; private String password; private String passphrase; private String remoteGroup; /** * @return */ public String getPassphrase() { return passphrase; } /** * @param passphrase */ public void setPassphrase(String passphrase) { this.passphrase = passphrase; } /** * @return */ public String getPassword() { return password; } /** * @param password */ public void setPassword(String password) { this.password = password; } /** * @return */ public String getUsername() { return username; } /** * @param username */ public void setUsername(String username) { this.username = username; } /** * @return */ public String getRemoteGroup() { return remoteGroup; } /** * @param remoteGroup */ public void setRemoteGroup(String remoteGroup) { this.remoteGroup = remoteGroup; } } 1.1 maven/src/plugins-build/artifact/src/main/org/apache/maven/artifact/deployer/deploy/AuthenticationInfo.java Index: AuthenticationInfo.java =================================================================== package org.apache.maven.artifact.deployer.deploy; /* ==================================================================== * The Apache Software License, Version 1.1 * * Copyright (c) 2001 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, * if any, must include the following acknowledgment: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowledgment may appear in the software itself, * if and wherever such third-party acknowledgments normally appear. * * 4. The names "Apache" and "Apache Software Foundation" and * "Apache MavenSession" must not be used to endorse or promote products * derived from this software without prior written permission. For * written permission, please contact [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache", * "Apache MavenSession", nor may "Apache" appear in their name, without * prior written permission of the Apache Software Foundation. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. * * ==================================================================== */ /** * Holder of the infomarmation which is used to authentificate user * during deployment process. * * @author <a href="[EMAIL PROTECTED]">Michal Maczka</a> * @version $Revision: 1.1 $ $Date: 2003/06/16 14:26:01 $ */ public interface AuthenticationInfo { /** * @return */ public abstract String getPassphrase(); /** * @param passphrase */ public abstract void setPassphrase(String passphrase); /** * @return */ public abstract String getPassword(); /** * @param password */ public abstract void setPassword(String password); /** * @return */ public abstract String getUsername(); /** * @param username */ public abstract void setUsername(String username); /** * @return */ public abstract String getRemoteGroup(); /** * @param remoteGroup */ public abstract void setRemoteGroup(String remoteGroup); } 1.1 maven/src/plugins-build/artifact/src/main/org/apache/maven/artifact/deployer/deploy/FtpDeployer.java Index: FtpDeployer.java =================================================================== package org.apache.maven.artifact.deployer.deploy; /* ==================================================================== * The Apache Software License, Version 1.1 * * Copyright (c) 2001 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, * if any, must include the following acknowledgment: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowledgment may appear in the software itself, * if and wherever such third-party acknowledgments normally appear. * * 4. The names "Apache" and "Apache Software Foundation" and * "Apache MavenSession" must not be used to endorse or promote products * derived from this software without prior written permission. For * written permission, please contact [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache", * "Apache MavenSession", nor may "Apache" appear in their name, without * prior written permission of the Apache Software Foundation. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. * * ==================================================================== */ import java.io.FileInputStream; import java.io.IOException; import java.io.PrintWriter; import org.apache.commons.net.ProtocolCommandEvent; import org.apache.commons.net.ProtocolCommandListener; import org.apache.commons.net.ftp.FTP; import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPConnectionClosedException; import org.apache.commons.net.ftp.FTPReply; /** * An FTP deployer based on the FTPClient in the Commons Net package. * * @author <a href="mailto:[EMAIL PROTECTED]">Jason van Zyl</a> * * @version $Id: FtpDeployer.java,v 1.1 2003/06/16 14:26:01 michal Exp $ * * @todo account for username and password. */ public class FtpDeployer extends AbstractDeployer { /** * Description of the Method */ public void deploy(AuthenticationInfo authInfo, String host, String localPath, String remotePath) { String username = authInfo.getUsername(); String password = authInfo.getPassword(); FTPClient ftp = new FTPClient(); ftp.addProtocolCommandListener( new PrintCommandListener(new PrintWriter(System.out))); try { int reply; ftp.connect(host); System.out.println("Connected to " + host + "."); // After connection attempt, you should check the reply code to verify // success. reply = ftp.getReplyCode(); if (FTPReply.isPositiveCompletion(reply) == false) { ftp.disconnect(); System.err.println("FTP server refused connection."); System.exit(1); } } catch (IOException e) { if (ftp.isConnected()) { try { ftp.disconnect(); } catch (IOException f) { // do nothing } } System.err.println("Could not connect to server."); e.printStackTrace(); System.exit(1); } __main : try { if (ftp.login(username, password) == false) { ftp.logout(); break __main; } System.out.println("Remote system is " + ftp.getSystemName()); // Set to binary mode. ftp.setFileType(FTP.BINARY_FILE_TYPE); // Use passive mode as default because most of us are // behind firewalls these days. ftp.enterLocalPassiveMode(); String workingDir = remotePath.substring(0, remotePath.lastIndexOf("/")); String filename = remotePath.substring(remotePath.lastIndexOf("/")+1); System.out.println("Working directory " + workingDir); System.out.println("Filename: " + filename); System.out.println("LocalPath: " + localPath); ftp.makeDirectory(workingDir); ftp.changeWorkingDirectory( workingDir); ftp.storeFile(filename, new FileInputStream(localPath)); ftp.logout(); } catch (FTPConnectionClosedException e) { System.err.println("Server closed connection."); e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (ftp.isConnected()) { try { ftp.disconnect(); } catch (IOException f) { // do nothing } } } } /** * Description of the Class */ public class PrintCommandListener implements ProtocolCommandListener { private PrintWriter writer; /** * Constructor for the PrintCommandListener object * * @param writer */ public PrintCommandListener(PrintWriter writer) { this.writer = writer; } /** * Description of the Method */ public void protocolCommandSent(ProtocolCommandEvent event) { writer.print(event.getMessage()); writer.flush(); } /** * Description of the Method */ public void protocolReplyReceived(ProtocolCommandEvent event) { writer.print(event.getMessage()); writer.flush(); } } } 1.1 maven/src/plugins-build/artifact/src/plugin-resources/templates/manifest.vm Index: manifest.vm =================================================================== Built-By: ${jellyContext.getVarable("user.name")} Created-By: Apache Jakarta Maven #if (${pom.Package}) Package: ${pom.Package} #end Build-Jdk: ${jellyContext.getVarable("java.version")} #if (${pom.ArtifactId}) Extension-Name: ${pom.ArtifactId} #end #if (${pom.SpecificationVersion}) Specification-Version: ${pom.SpecificationVersion} #end #if (${pom.Organization.Name}) Specification-Vendor: ${pom.Organization.Name} #end #if (${pom.ShortDescription}) Specification-Title: ${pom.ShortDescription} #end #if (${pom.CurrentVersion}) Implementation-Version: ${pom.CurrentVersion} #end #if (${pom.Organization.Name}) Implementation-Vendor: ${pom.Organization.Name} Implementation-Vendor-Id: ${pom.Organization.Name} #end #if(${mainclass}) Main-Class=${mainclass} #end #if( ${addExtensions}) #set($extensionList = "") #foreach($artifact in $pom.Artifacts) #set ($dep= $artifact.Dependency ) #if( $dep.Type == "jar" ) #set($extensionList = "$extensionList $artifact.Dependency.ArtifactId") #end #end Extension-List: ${extensionList} #foreach($artifact in $pom.Artifacts) #set ($dep= $artifact.Dependency ) #if( $dep.Type == "jar" ) ${dep.ArtifactId}-Extension-Name: ${dep.ArtifactId} ${dep.ArtifactId}-Implementation-Version: ${dep.Version} #if($dep.Url) ${dep.ArtifactId}-Implementation-URL: ${dep.Url} #else ${dep.ArtifactId}-Implementation-URL: http://www.ibiblio.org/maven/ #end #end #end #end
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]