Gradle maven-publish with sftp和ecdsa-sha2-nistp256 security

时间:2018-06-07 12:50:19

标签: android gradle jsch maven-publish

我开发了一些内部库。我们有一个sftp服务器来部署aar。默认情况下,SSH安全性在服务器端设置为 ecdsa-sha2-nistp256 ,我们无法对其进行更改。我知道这种安全性并不是Gradle友好的(到目前为止直到4.8)。所以我设法使用命令行ssh ssh-rsa 。我尝试了gradle --stacktrace publish来测试我的更改,但是gradle仍在使用服务器默认安全性sha2。我现在有点卡住了。

这是Gradle

import java.text.SimpleDateFormat

apply plugin: 'com.android.library'
apply plugin: 'io.fabric'
apply plugin: 'maven-publish'

def projectName = "MyLibrary"
def versionString = "1.0.7.2"
def repositoryUrl = 'sftp://myserver.com:222/my.accountbuild/'


task sourceJar(type: Jar) {
    classifier 'sources'
    from android.sourceSets.main.java.sourceFiles
}

publishing {
    publications {
        MyLibrary(MavenPublication) {
            groupId 'com.mycompany'
            artifactId projectName
            version versionString
            artifact(sourceJar)
            artifact("$buildDir/outputs/aar/MyLibrary.aar")
        }
    }
    repositories {
        maven {
            url repositoryUrl
            credentials {
                username 'my.accountbuild'
                password 'xxxxxx'
            }
        }
    }
}

android {
    compileSdkVersion 24

    defaultConfig {
        minSdkVersion 18
        targetSdkVersion 24
        versionCode 1
        versionName versionString
    }

    def propFile = new File(getProjectDir(), "/src/main/res/xml/version_" + projectName.toLowerCase() + ".xml")
    propFile.createNewFile()
    propFile.text = """
                    <version>
                    Version: ${versionString}
                    Buildtime: ${new SimpleDateFormat("dd-MM-yyyy HH:mm:ss").format(new Date())}
                    Application-name: ${projectName}
                    </version>
                    """.replaceAll(" {20}", "").substring(1)

    libraryVariants.all { variant ->
        variant.outputs.all {
            outputFileName = projectName + ".aar"
        }
    }

    buildTypes {
        release {}
        debug{}
    }
}



dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    // Android libs
    implementation 'com.android.support:appcompat-v7:24.2.1'
    implementation 'com.android.support:design:24.2.1'
    // Retrofit & okhttp libs
    implementation 'com.squareup.retrofit2:retrofit:2.+'
    implementation 'com.squareup.retrofit2:converter-gson:2.+'
    implementation 'com.squareup.okhttp3:okhttp:3.2.0'
    implementation 'com.squareup.okhttp3:logging-interceptor:3.2.0'
    // Azure storage libs
    implementation 'com.microsoft.azure.android:azure-storage-android:2.0.0'
    // Crashlytics libs
    implementation('com.crashlytics.sdk.android:crashlytics:2.9.1@aar') {
        transitive = true
    }
    // Push notification libs
    implementation 'com.google.android.gms:play-services-gcm:9.2.0'
    implementation 'com.microsoft.azure:notification-hubs-android-sdk:0.4@aar'
    implementation 'com.microsoft.azure:azure-notifications-handler:1.0.1@aar'
    // Mail libs
    implementation files('src/main/assets/activation.jar')
    implementation files('src/main/assets/additionnal.jar')
    implementation files('src/main/assets/mail.jar')


    // Logs / Crashes
    def appCenterSdkVersion = '1.5.0'
    implementation "com.microsoft.appcenter:appcenter-analytics:${appCenterSdkVersion}"
    implementation "com.microsoft.appcenter:appcenter-crashes:${appCenterSdkVersion}"



}

repositories {
    mavenCentral()
    maven { url "http://dl.bintray.com/microsoftazuremobile/SDK" }
    maven { url 'https://maven.fabric.io/public' }
    maven {
        url repositoryUrl
        credentials {
            username 'my.accountdev'
            password 'xxxxxx'
        }
    }
}

apply plugin: 'com.google.gms.google-services'

这是gradle publish堆栈跟踪:

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:publishMyLibraryPublicationToMavenRepository'.
> Failed to publish publication 'MyLibrary' to repository 'maven'
   > Password authentication not supported or invalid credentials for SFTP server at sftp://myserver.com:222
      > Auth fail

* Try:
Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:publishMyLibraryPublicationToMavenRepository'.
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:110)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:77)
        at org.gradle.api.internal.tasks.execution.OutputDirectoryCreatingTaskExecuter.execute(OutputDirectoryCreatingTaskExecuter.java:51)
        at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:59)
        at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54)
        at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:59)
        at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:101)
        at org.gradle.api.internal.tasks.execution.FinalizeInputFilePropertiesTaskExecuter.execute(FinalizeInputFilePropertiesTaskExecuter.java:44)
        at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:91)
        at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:62)
        at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:59)
        at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54)
        at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
        at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.run(EventFiringTaskExecuter.java:51)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:317)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:309)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:185)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:97)
        at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:46)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$ExecuteTaskAction.execute(DefaultTaskExecutionGraph.java:262)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$ExecuteTaskAction.execute(DefaultTaskExecutionGraph.java:246)
        at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:136)
        at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:130)
        at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.execute(DefaultTaskPlanExecutor.java:201)
        at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.executeWithTask(DefaultTaskPlanExecutor.java:192)
        at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.run(DefaultTaskPlanExecutor.java:130)
        at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
        at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
        at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
Caused by: org.gradle.api.artifacts.PublishException: Failed to publish publication 'MyLibrary' to repository 'maven'
        at org.gradle.api.publish.internal.PublishOperation.run(PublishOperation.java:38)
        at org.gradle.api.publish.maven.tasks.PublishToMavenRepository.doPublish(PublishToMavenRepository.java:77)
        at org.gradle.api.publish.maven.tasks.PublishToMavenRepository.publish(PublishToMavenRepository.java:73)
        at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.doExecute(StandardTaskAction.java:46)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:39)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:26)
        at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:794)
        at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:761)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$1.run(ExecuteActionsTaskExecuter.java:131)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:317)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:309)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:185)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:97)
        at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:120)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:99)
        ... 30 more
Caused by: org.gradle.api.GradleException: Failed to deploy artifacts: Could not transfer artifact com.mycompany:MyLibrary:aar:1.0.7.2 from/to remote (sftp://myserver.com:222/my.accountbuild/): Could not write to resource 'com/mycompany/MyLibrary/1.0.7.2/MyLibrary-1.0.7.2.aar'
        at org.gradle.api.publication.maven.internal.action.AbstractMavenPublishAction.publish(AbstractMavenPublishAction.java:111)
        at org.gradle.api.publication.maven.internal.action.MavenDeployAction.publish(MavenDeployAction.java:36)
        at org.gradle.api.publish.maven.internal.publisher.MavenRemotePublisher$GradleWagonMavenDeployAction.publish(MavenRemotePublisher.java:90)
        at org.gradle.api.publish.maven.internal.publisher.AbstractMavenPublisher.execute(AbstractMavenPublisher.java:76)
        at org.gradle.api.publish.maven.internal.publisher.AbstractMavenPublisher.publish(AbstractMavenPublisher.java:50)
        at org.gradle.api.publish.maven.internal.publisher.StaticLockingMavenPublisher.publish(StaticLockingMavenPublisher.java:38)
        at org.gradle.api.publish.maven.internal.publisher.ValidatingMavenPublisher.publish(ValidatingMavenPublisher.java:49)
        at org.gradle.api.publish.maven.tasks.PublishToMavenRepository$1.publish(PublishToMavenRepository.java:83)
        at org.gradle.api.publish.internal.PublishOperation.run(PublishOperation.java:36)
        ... 46 more
Caused by: org.sonatype.aether.deployment.DeploymentException: Failed to deploy artifacts: Could not transfer artifact com.mycompany:MyLibrary:aar:1.0.7.2 from/to remote (sftp://myserver.com:222/my.accountbuild/): Could not write to resource 'com/mycompany/MyLibrary/1.0.7.2/MyLibrary-1.0.7.2.aar'
        at org.sonatype.aether.impl.internal.DefaultDeployer.deploy(DefaultDeployer.java:280)
        at org.sonatype.aether.impl.internal.DefaultDeployer.deploy(DefaultDeployer.java:211)
        at org.sonatype.aether.impl.internal.DefaultRepositorySystem.deploy(DefaultRepositorySystem.java:443)
        at org.gradle.api.publication.maven.internal.action.MavenDeployAction.publishArtifacts(MavenDeployAction.java:70)
        at org.gradle.api.publication.maven.internal.action.AbstractMavenPublishAction.publish(AbstractMavenPublishAction.java:109)
        ... 54 more
Caused by: org.sonatype.aether.transfer.ArtifactTransferException: Could not transfer artifact com.mycompany:MyLibrary:aar:1.0.7.2 from/to remote (sftp://myserver.com:222/my.accountbuild/): Could not write to resource 'com/mycompany/MyLibrary/1.0.7.2/MyLibrary-1.0.7.2.aar'
        at org.sonatype.aether.connector.wagon.WagonRepositoryConnector$4.wrap(WagonRepositoryConnector.java:951)
        at org.sonatype.aether.connector.wagon.WagonRepositoryConnector$4.wrap(WagonRepositoryConnector.java:941)
        at org.sonatype.aether.connector.wagon.WagonRepositoryConnector$PutTask.run(WagonRepositoryConnector.java:837)
        at org.sonatype.aether.connector.wagon.WagonRepositoryConnector.put(WagonRepositoryConnector.java:467)
        at org.sonatype.aether.impl.internal.DefaultDeployer.deploy(DefaultDeployer.java:274)
        ... 58 more
Caused by: org.apache.maven.wagon.TransferFailedException: Could not write to resource 'com/mycompany/MyLibrary/1.0.7.2/MyLibrary-1.0.7.2.aar'
        at org.gradle.api.publication.maven.internal.wagon.RepositoryTransportDeployWagon.put(RepositoryTransportDeployWagon.java:97)
        at org.sonatype.aether.connector.wagon.WagonRepositoryConnector$PutTask.run(WagonRepositoryConnector.java:811)
        ... 60 more
Caused by: org.gradle.api.resources.ResourceException: Password authentication not supported or invalid credentials for SFTP server at sftp://myserver.com:222
        at org.gradle.internal.resource.transport.sftp.SftpClientFactory$SftpClientCreator.createNewClient(SftpClientFactory.java:103)
        at org.gradle.internal.resource.transport.sftp.SftpClientFactory.createNewClient(SftpClientFactory.java:76)
        at org.gradle.internal.resource.transport.sftp.SftpClientFactory.acquireClient(SftpClientFactory.java:51)
        at org.gradle.internal.resource.transport.sftp.SftpClientFactory.createSftpClient(SftpClientFactory.java:46)
        at org.gradle.internal.resource.transport.sftp.SftpResourceUploader.upload(SftpResourceUploader.java:43)
        at org.gradle.internal.resource.transfer.DefaultExternalResourceConnector.upload(DefaultExternalResourceConnector.java:76)
        at org.gradle.internal.resource.transfer.ProgressLoggingExternalResourceUploader.upload(ProgressLoggingExternalResourceUploader.java:39)
        at org.gradle.internal.resource.transfer.AccessorBackedExternalResource.put(AccessorBackedExternalResource.java:182)
        at org.gradle.internal.resource.BuildOperationFiringExternalResourceDecorator$3.call(BuildOperationFiringExternalResourceDecorator.java:100)
        at org.gradle.internal.resource.BuildOperationFiringExternalResourceDecorator$3.call(BuildOperationFiringExternalResourceDecorator.java:97)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:331)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:321)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:185)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:107)
        at org.gradle.internal.operations.DelegatingBuildOperationExecutor.call(DelegatingBuildOperationExecutor.java:36)
        at org.gradle.internal.resource.BuildOperationFiringExternalResourceDecorator.put(BuildOperationFiringExternalResourceDecorator.java:97)
        at org.gradle.api.publication.maven.internal.wagon.RepositoryTransportWagonAdapter.putRemoteFile(RepositoryTransportWagonAdapter.java:44)
        at org.gradle.api.publication.maven.internal.wagon.RepositoryTransportDeployWagon.put(RepositoryTransportDeployWagon.java:94)
        ... 61 more
Caused by: com.jcraft.jsch.JSchException: Auth fail
        at com.jcraft.jsch.Session.connect(Session.java:519)
        at com.jcraft.jsch.Session.connect(Session.java:183)
        at org.gradle.internal.resource.transport.sftp.SftpClientFactory$SftpClientCreator.createNewClient(SftpClientFactory.java:96)
        ... 78 more

有没有办法让gradle使用我的~/.ssh/known_hosts?或者有人设法使用 ecdsa-sha2-nistp256

0 个答案:

没有答案