我开发了一些内部库。我们有一个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 ?