Hi Howard,

You can store sensitive data in either gradle.properties or 
$USER_HOME/.gradle/gradle.properties
We use this technique in the Griffon build, however be aware that you must be 
ready for non-existant properties should any of those files is missing. This is 
what we do in Griffon


if(!project.hasProperty('codehausUsername')) codehausUsername = ''
if(!project.hasProperty('codehausPassword')) codehausPassword = ''

uploadArchives {
    repositories {
        deployer = mavenDeployer {
            name = 'codehausDeployer'
            configuration = configurations.deployerJars
            uploadDescriptor = true
            repository(url: codehausReleaseUrl) {
                authentication(userName: codehausUsername, password: 
codehausPassword)
            }
            snapshotRepository(url: codehausSnapshotUrl) {
                uniqueVersion = false
                authentication(userName: codehausUsername, password: 
codehausPassword)
            }
        }
    }
}
By setting those properties to empty strings the build will continue to work 
(the build script will compile) but the install/upload tasks will fails due to 
authentication (which is expected). You'll then define codehausUsername and 
codehausPassword in gradle.properties to make it work.

Cheers,
Andres





________________________________
From: Howard Lewis Ship <[email protected]>
To: [email protected]
Sent: Tue, January 18, 2011 6:22:58 PM
Subject: [gradle-user] Problem using Maven plugin to deploy artifacts via FTP

I'm trying to get my libraries to deploy via FTP.  I have it partly
working, but there's a problem.

My multi-module project's build.gradle:

description = "Collection of add-ons for Tapestry 5"

tapestryVersion = "5.2.4"

subprojects {
    apply plugin: 'java'
    apply plugin: 'groovy' // mostly for testing
    apply plugin: 'eclipse'
    apply plugin: 'maven'
    apply plugin: 'project-report'

    sourceCompatibility = '1.5'
    targetCompatibility = '1.5'

    version = '1.1-SNAPSHOT'

    group = 'com.howardlewisship'

    repositories {
        mavenCentral()

        // All things JBoss/Javassist/Hibernate
        mavenRepo urls:
"https://repository.jboss.org/nexus/content/repositories/releases/";

        // For the Kaptcha library
        mavenRepo urls: "http://howardlewisship.com/repository/";
    }

    configurations {
        deployerJars
    }

    dependencies {
        compile "org.apache.tapestry:tapestry-core:$tapestryVersion"
        testCompile "org.apache.tapestry:tapestry-test:$tapestryVersion"
        testCompile "org.easymock:easymock:3.0"
        groovy "org.codehaus.groovy:groovy-all:1.7.4"

        deployerJars "org.apache.maven.wagon:wagon-ftp:1.0-beta-2"
    }

    test {
        useTestNG()

        options.suites("src/test/conf/testng.xml")
    }

    task sourcesJar(type: Jar, dependsOn:classes) {
       classifier = 'sources'
       from sourceSets.main.allSource
    }

    artifacts {
       archives sourcesJar
    }


    uploadArchives {
        repositories.mavenDeployer {
            configuration = configurations.deployerJars
            // settings.xml must contain <server> entry for
howardlewisship.com with username and password
            snapshotRepository(id: 'howardlewisship.com', url:
"ftp://howardlewisship.com/snapshot-repository";) {
              authentication(userName: '[email protected]',
password: 'TOPSECRET')
            }

        }
    }
}


This works ... but notice that I have my userName and password in the
authentication.  This shouldn't be necessary.  I have a
~/.m2/settings.xml:

<?xml version="1.0"?>
<settings>
  <servers>
    <server>
      <id>howardlewisship.com</id>
      <username>[email protected]</username>
      <password>TOPSECRET</password>
    </server>
  </servers>
</settings>



If I omit the authentication() element, or omit the password, or set
the password to blank, I get:

16:16:13.316 [DEBUG]
[org.gradle.api.internal.project.ant.AntLoggingAdapter] [ant:null]
Maven Ant Tasks version: 2.1.1
16:16:13.771 [DEBUG]
[org.gradle.api.internal.project.ant.AntLoggingAdapter] [ant:null]
Loading Maven settings file:
/var/folders/9h/9hzVZeGsGtSsTZH5Eejb0U+++TI/-Tmp-/gradle_empty_settings7294710492673423739.xml

16:16:13.885 [DEBUG]
[org.gradle.api.internal.project.ant.AntLoggingAdapter] [ant:null]
Loading Maven settings file: /Users/hlship/.m2/settings.xml
16:16:13.928 [INFO]
[org.gradle.api.internal.project.ant.AntLoggingAdapter] [ant:null]
Deploying to ftp://howardlewisship.com/snapshot-repository
16:16:13.934 [INFO] [system.out] [INFO] Retrieving previous build
number from howardlewisship.com
16:16:17.452 [DEBUG] [org.gradle.api.internal.tasks.SkipTaskExecuter]
Finished executing task ':tapx-datefield:uploadArchives'
16:16:17.464 [ERROR] [org.gradle.BuildExceptionReporter]
16:16:17.465 [ERROR] [org.gradle.BuildExceptionReporter] FAILURE:
Build failed with an exception.
16:16:17.466 [ERROR] [org.gradle.BuildExceptionReporter]
16:16:17.466 [ERROR] [org.gradle.BuildExceptionReporter] * Where:
16:16:17.466 [ERROR] [org.gradle.BuildExceptionReporter] Build file
'/Users/hlship/workspaces/tapestry/tapx/tapx-datefield/build.gradle'
16:16:17.466 [ERROR] [org.gradle.BuildExceptionReporter]
16:16:17.466 [ERROR] [org.gradle.BuildExceptionReporter] * What went wrong:
16:16:17.467 [ERROR] [org.gradle.BuildExceptionReporter] Execution
failed for task ':tapx-datefield:uploadArchives'.
16:16:17.468 [ERROR] [org.gradle.BuildExceptionReporter] Cause: Could
not publish configurations [configuration ':tapx-datefield:archives'].
16:16:17.468 [ERROR] [org.gradle.BuildExceptionReporter]
16:16:17.469 [ERROR] [org.gradle.BuildExceptionReporter] * Exception is:
16:16:17.469 [ERROR] [org.gradle.BuildExceptionReporter]
org.gradle.api.tasks.LocationAwareTaskExecutionException: Build file
'/Users/hlship/workspaces/tapestry/tapx/tapx-datefield/build.gradle'
16:16:17.470 [ERROR] [org.gradle.BuildExceptionReporter] Execution
failed for task ':tapx-datefield:uploadArchives'.
16:16:17.470 [ERROR] [org.gradle.BuildExceptionReporter]     at
org.gradle.api.internal.tasks.DefaultTaskExecuter.executeActions(DefaultTaskExecuter.java:66)

16:16:17.470 [ERROR] [org.gradle.BuildExceptionReporter]     at
org.gradle.api.internal.tasks.DefaultTaskExecuter.execute(DefaultTaskExecuter.java:43)

16:16:17.470 [ERROR] [org.gradle.BuildExceptionReporter]     at
org.gradle.api.internal.project.taskfactory.PostExecutionAnalysisTaskExecuter.execute(PostExecutionAnalysisTaskExecuter.java:32)

16:16:17.470 [ERROR] [org.gradle.BuildExceptionReporter]     at
org.gradle.api.internal.project.taskfactory.ExecutionShortCircuitTaskExecuter.execute(ExecutionShortCircuitTaskExecuter.java:50)

16:16:17.471 [ERROR] [org.gradle.BuildExceptionReporter]     at
org.gradle.api.internal.tasks.SkipTaskExecuter.doExecute(SkipTaskExecuter.java:57)

16:16:17.471 [ERROR] [org.gradle.BuildExceptionReporter]     at
org.gradle.api.internal.tasks.SkipTaskExecuter.execute(SkipTaskExecuter.java:35)
16:16:17.471 [ERROR] [org.gradle.BuildExceptionReporter]     at
org.gradle.api.internal.tasks.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:32)

16:16:17.471 [ERROR] [org.gradle.BuildExceptionReporter]     at
org.gradle.api.internal.AbstractTask.execute(AbstractTask.java:231)
16:16:17.471 [ERROR] [org.gradle.BuildExceptionReporter]     at
org.gradle.execution.DefaultTaskGraphExecuter.executeTask(DefaultTaskGraphExecuter.java:167)

16:16:17.472 [ERROR] [org.gradle.BuildExceptionReporter]     at
org.gradle.execution.DefaultTaskGraphExecuter.doExecute(DefaultTaskGraphExecuter.java:160)

16:16:17.472 [ERROR] [org.gradle.BuildExceptionReporter]     at
org.gradle.execution.DefaultTaskGraphExecuter.execute(DefaultTaskGraphExecuter.java:78)

16:16:17.472 [ERROR] [org.gradle.BuildExceptionReporter]     at
org.gradle.execution.TaskNameResolvingBuildExecuter.execute(TaskNameResolvingBuildExecuter.java:113)

16:16:17.472 [ERROR] [org.gradle.BuildExceptionReporter]     at
org.gradle.execution.DelegatingBuildExecuter.execute(DelegatingBuildExecuter.java:54)

16:16:17.473 [ERROR] [org.gradle.BuildExceptionReporter]     at
org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:153)

16:16:17.473 [ERROR] [org.gradle.BuildExceptionReporter]     at
org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:107)

16:16:17.473 [ERROR] [org.gradle.BuildExceptionReporter]     at
org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:75)

16:16:17.473 [ERROR] [org.gradle.BuildExceptionReporter]     at
org.gradle.launcher.RunBuildAction.execute(RunBuildAction.java:41)
16:16:17.473 [ERROR] [org.gradle.BuildExceptionReporter]     at
org.gradle.launcher.RunBuildAction.execute(RunBuildAction.java:27)
16:16:17.474 [ERROR] [org.gradle.BuildExceptionReporter]     at
org.gradle.launcher.CommandLineActionFactory$WithLoggingAction.execute(CommandLineActionFactory.java:209)

16:16:17.474 [ERROR] [org.gradle.BuildExceptionReporter]     at
org.gradle.launcher.CommandLineActionFactory$WithLoggingAction.execute(CommandLineActionFactory.java:193)

16:16:17.474 [ERROR] [org.gradle.BuildExceptionReporter]     at
org.gradle.launcher.Main.execute(Main.java:55)
16:16:17.474 [ERROR] [org.gradle.BuildExceptionReporter]     at
org.gradle.launcher.Main.main(Main.java:40)
16:16:17.475 [ERROR] [org.gradle.BuildExceptionReporter]     at
org.gradle.launcher.ProcessBootstrap.runNoExit(ProcessBootstrap.java:46)
16:16:17.475 [ERROR] [org.gradle.BuildExceptionReporter]     at
org.gradle.launcher.ProcessBootstrap.run(ProcessBootstrap.java:28)
16:16:17.475 [ERROR] [org.gradle.BuildExceptionReporter]     at
org.gradle.launcher.GradleMain.main(GradleMain.java:24)
16:16:17.475 [ERROR] [org.gradle.BuildExceptionReporter] Caused by:
org.gradle.api.GradleException: Could not publish configurations
[configuration ':tapx-datefield:archives'].
16:16:17.476 [ERROR] [org.gradle.BuildExceptionReporter]     at
org.gradle.api.internal.artifacts.ivyservice.ErrorHandlingIvyService.publish(ErrorHandlingIvyService.java:44)

16:16:17.476 [ERROR] [org.gradle.BuildExceptionReporter]     at
org.gradle.api.internal.artifacts.configurations.DefaultConfiguration.publish(DefaultConfiguration.java:211)

16:16:17.476 [ERROR] [org.gradle.BuildExceptionReporter]     at
org.gradle.api.tasks.Upload.upload(Upload.java:56)
16:16:17.476 [ERROR] [org.gradle.BuildExceptionReporter]     at
org.gradle.api.internal.BeanDynamicObject.invokeMethod(BeanDynamicObject.java:158)

16:16:17.477 [ERROR] [org.gradle.BuildExceptionReporter]     at
org.gradle.api.internal.CompositeDynamicObject.invokeMethod(CompositeDynamicObject.java:93)

16:16:17.477 [ERROR] [org.gradle.BuildExceptionReporter]     at
org.gradle.api.tasks.Upload_Decorated.invokeMethod(Unknown Source)
16:16:17.477 [ERROR] [org.gradle.BuildExceptionReporter]     at
org.gradle.util.ReflectionUtil.invoke(ReflectionUtil.groovy:23)
16:16:17.477 [ERROR] [org.gradle.BuildExceptionReporter]     at
org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$2.execute(AnnotationProcessingTaskFactory.java:131)

16:16:17.478 [ERROR] [org.gradle.BuildExceptionReporter]     at
org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$2.execute(AnnotationProcessingTaskFactory.java:130)

16:16:17.478 [ERROR] [org.gradle.BuildExceptionReporter]     at
org.gradle.api.internal.tasks.DefaultTaskExecuter.executeActions(DefaultTaskExecuter.java:58)

16:16:17.478 [ERROR] [org.gradle.BuildExceptionReporter]     ... 24 more
16:16:17.478 [ERROR] [org.gradle.BuildExceptionReporter] Caused by:
java.lang.NullPointerException
16:16:17.478 [ERROR] [org.gradle.BuildExceptionReporter]     at
org.apache.maven.wagon.providers.ftp.FtpWagon.openConnection(FtpWagon.java:130)
16:16:17.479 [ERROR] [org.gradle.BuildExceptionReporter]     at
org.apache.maven.wagon.AbstractWagon.connect(AbstractWagon.java:207)
16:16:17.479 [ERROR] [org.gradle.BuildExceptionReporter]     at
org.apache.maven.artifact.manager.DefaultWagonManager.getRemoteFile(DefaultWagonManager.java:494)

16:16:17.479 [ERROR] [org.gradle.BuildExceptionReporter]     at
org.apache.maven.artifact.manager.DefaultWagonManager.getArtifactMetadataFromDeploymentRepository(DefaultWagonManager.java:452)

16:16:17.479 [ERROR] [org.gradle.BuildExceptionReporter]     at
org.apache.maven.artifact.repository.metadata.DefaultRepositoryMetadataManager.getArtifactMetadataFromDeploymentRepository(DefaultRepositoryMetadataManager.java:379)

16:16:17.480 [ERROR] [org.gradle.BuildExceptionReporter]     at
org.apache.maven.artifact.repository.metadata.DefaultRepositoryMetadataManager.resolveAlways(DefaultRepositoryMetadataManager.java:347)

16:16:17.480 [ERROR] [org.gradle.BuildExceptionReporter]     at
org.apache.maven.artifact.transform.SnapshotTransformation.resolveLatestSnapshotBuildNumber(SnapshotTransformation.java:161)

16:16:17.480 [ERROR] [org.gradle.BuildExceptionReporter]     at
org.apache.maven.artifact.transform.SnapshotTransformation.transformForDeployment(SnapshotTransformation.java:100)

16:16:17.480 [ERROR] [org.gradle.BuildExceptionReporter]     at
org.apache.maven.artifact.transform.DefaultArtifactTransformationManager.transformForDeployment(DefaultArtifactTransformationManager.java:74)

16:16:17.481 [ERROR] [org.gradle.BuildExceptionReporter]     at
org.apache.maven.artifact.deployer.DefaultArtifactDeployer.deploy(DefaultArtifactDeployer.java:86)

16:16:17.481 [ERROR] [org.gradle.BuildExceptionReporter]     at
org.apache.maven.artifact.ant.DeployTask.doExecute(DeployTask.java:125)
16:16:17.481 [ERROR] [org.gradle.BuildExceptionReporter]     at
org.gradle.api.internal.artifacts.publish.maven.deploy.CustomDeployTask.doExecute(CustomDeployTask.java:42)

16:16:17.481 [ERROR] [org.gradle.BuildExceptionReporter]     at
org.apache.maven.artifact.ant.AbstractArtifactTask.execute(AbstractArtifactTask.java:718)

16:16:17.482 [ERROR] [org.gradle.BuildExceptionReporter]     at
org.gradle.api.internal.artifacts.publish.maven.deploy.AbstractMavenResolver.execute(AbstractMavenResolver.java:189)

16:16:17.482 [ERROR] [org.gradle.BuildExceptionReporter]     at
org.gradle.api.internal.artifacts.publish.maven.deploy.AbstractMavenResolver.commitPublishTransaction(AbstractMavenResolver.java:180)

16:16:17.482 [ERROR] [org.gradle.BuildExceptionReporter]     at
org.apache.ivy.core.publish.PublishEngine.publish(PublishEngine.java:262)
16:16:17.482 [ERROR] [org.gradle.BuildExceptionReporter]     at
org.gradle.api.internal.artifacts.ivyservice.DefaultIvyDependencyPublisher.publish(DefaultIvyDependencyPublisher.java:54)

16:16:17.482 [ERROR] [org.gradle.BuildExceptionReporter]     at
org.gradle.api.internal.artifacts.ivyservice.DefaultIvyService.publish(DefaultIvyService.java:144)

16:16:17.483 [ERROR] [org.gradle.BuildExceptionReporter]     at
org.gradle.api.internal.artifacts.ivyservice.ShortcircuitEmptyConfigsIvyService.publish(ShortcircuitEmptyConfigsIvyService.java:61)

16:16:17.483 [ERROR] [org.gradle.BuildExceptionReporter]     at
org.gradle.api.internal.artifacts.ivyservice.ErrorHandlingIvyService.publish(ErrorHandlingIvyService.java:42)

16:16:17.483 [ERROR] [org.gradle.BuildExceptionReporter]     ... 33 more
16:16:17.483 [ERROR] [org.gradle.BuildExceptionReporter]
16:16:17.484 [LIFECYCLE] [org.gradle.BuildResultLogger]
16:16:17.484 [LIFECYCLE] [org.gradle.BuildResultLogger] BUILD FAILED
16:16:17.484 [LIFECYCLE] [org.gradle.BuildResultLogger]
16:16:17.484 [LIFECYCLE] [org.gradle.BuildResultLogger] Total time: 11.268 secs


Which appears to be this:

http://jira.codehaus.org/browse/WAGON-145

... indicating that the userName and/or password are null.


Meanwhile, I have a separate Ant build.xml that is used to populate
the same Maven repository (actually, howardlewisship.com/repository,
not howardlewisship.com/snapshot-repository).  This is for a module
that is not built with Maven (a kpatcha library) that I want to be
downloadable using standard Maven.

Anyway, this build.xml works:

<?xml version="1.0"?>
<project xmlns:mvn="urn:maven-artifact-ant" default="deploy-libs">
  <macrodef name="deploy">
    <attribute name="name"/>
    <sequential>
      <mvn:deploy file="lib-import/@{name}.jar">
        <remoteRepository id="howardlewisship.com"
url="ftp://howardlewisship.com/repository"/>
        <pom file="lib-import/@{name}.pom"/>
        <attach file="lib-import/@{name}-sources.jar" classifier="sources"/>
      </mvn:deploy>
    </sequential>
  </macrodef>
  <target name="-setup-maven">
    <typedef resource="org/apache/maven/artifact/ant/antlib.xml"
uri="urn:maven-artifact-ant"/>
    <mvn:install-provider artifactId="wagon-ftp" version="1.0-beta-2"/>
  </target>
  <target name="deploy-libs" depends="-setup-maven"
description="Deploys libraries to Maven repository.">
    <deploy name="kaptcha-2.3"/>
  </target>
</project>

Notice that <remoteRepository> specifies and id but does not have any
authentication information.  The username and password are coming from
settings.xml.


$ gradle -v

------------------------------------------------------------
Gradle 0.9.1
------------------------------------------------------------

Gradle build time: Sunday, 2 January 2011 11:40:57 AM EST
Groovy: 1.7.6
Ant: Apache Ant version 1.8.1 compiled on April 30 2010
Ivy: 2.2.0
JVM: 1.6.0_22 (Apple Inc. 17.1-b03-307)
OS: Mac OS X 10.6.6 x86_64




.... so, is this a known bug and is there any kind of workaround where
I don't have to leave my passwords visible?

-- 
Howard M. Lewis Ship

Creator of Apache Tapestry

The source for Tapestry training, mentoring and support. Contact me to
learn how I can get you up and productive in Tapestry fast!

(971) 678-5210
http://howardlewisship.com

---------------------------------------------------------------------
To unsubscribe from this list, please visit:

    http://xircles.codehaus.org/manage_email


      

Reply via email to