Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ANT Java Discussion :

svnant et protocole svn+ssh


Sujet :

ANT Java

  1. #1
    Membre du Club
    svnant et protocole svn+ssh
    Bonjour,

    Je me créé pour le travail et pour moi-même un script ant permettant de taguer automatiquement sur SVN. J'ai testé au boulot et le script fonctionne bien avec le protocole svn.

    exemple d'adresse de dépôt : svn://IP/NOM_DEPOT/NOM_PROJET

    Par contre j'ai quelques difficulté pour faire fonctionner mon script Ant avec un protocol svn+ssh.

    J'ai eu au premier coup l'erreur suivante.
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    java.lang.NoClassDefFoundError: com/trilead/ssh2/ServerHostKeyVerifier


    Après une rapide recherche, je suis allé cherché la librairie trilead-ssh2-build213-svnkit-1.3-patch.jar et je l'ai ajouté au path d'exécution de mon script.

    Maintenant j'ai le message d'erreur suivant :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
          [svn] svn: authentication cancelled
          [svn] svn: authentication cancelled
          [svn] <Copy> failed.
          [svn] the execution failed for some reason. cause: Can't copy
          [svn] 	at org.tigris.subversion.svnant.commands.SvnCommand.ex(Unknown Source)
          [svn] 	at org.tigris.subversion.svnant.commands.Copy.execute(Unknown Source)
          [svn] 	at org.tigris.subversion.svnant.commands.SvnCommand.executeCommand(Unknown Source)
          [svn] 	at org.tigris.subversion.svnant.SvnTask.executeImpl(Unknown Source)
          [svn] 	at org.tigris.subversion.svnant.SvnTask.execute(Unknown Source)
          [svn] 	at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)
          [svn] 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
          [svn] 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
          [svn] 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
          [svn] 	at java.lang.reflect.Method.invoke(Method.java:597)
          [svn] 	at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
          [svn] 	at org.apache.tools.ant.Task.perform(Task.java:348)
          [svn] 	at org.apache.tools.ant.Target.execute(Target.java:357)
          [svn] 	at org.apache.tools.ant.Target.performTasks(Target.java:385)
          [svn] 	at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1337)
          [svn] 	at org.apache.tools.ant.Project.executeTarget(Project.java:1306)
          [svn] 	at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
          [svn] 	at org.eclipse.ant.internal.launching.remote.EclipseDefaultExecutor.executeTargets(EclipseDefaultExecutor.java:32)
          [svn] 	at org.apache.tools.ant.Project.executeTargets(Project.java:1189)
          [svn] 	at org.eclipse.ant.internal.launching.remote.InternalAntRunner.run(InternalAntRunner.java:423)
          [svn] 	at org.eclipse.ant.internal.launching.remote.InternalAntRunner.main(InternalAntRunner.java:137)
          [svn] Caused by: org.tigris.subversion.svnclientadapter.SVNClientException: org.tigris.subversion.javahl.ClientException: svn: authentication cancelled
          [svn] 	at org.tigris.subversion.svnclientadapter.javahl.AbstractJhlClientAdapter.copy(AbstractJhlClientAdapter.java:824)
          [svn] 	at org.tigris.subversion.svnclientadapter.javahl.AbstractJhlClientAdapter.copy(AbstractJhlClientAdapter.java:790)
          [svn] 	... 20 more
          [svn] Caused by: org.tigris.subversion.javahl.ClientException: svn: authentication cancelled
          [svn] 	at org.tigris.subversion.javahl.JavaHLObjectFactory.throwException(JavaHLObjectFactory.java:778)
          [svn] 	at org.tmatesoft.svn.core.javahl.SVNClientImpl.throwException(SVNClientImpl.java:1850)
          [svn] 	at org.tmatesoft.svn.core.javahl.SVNClientImpl.copyOrMove(SVNClientImpl.java:800)
          [svn] 	at org.tmatesoft.svn.core.javahl.SVNClientImpl.copy(SVNClientImpl.java:724)
          [svn] 	at org.tigris.subversion.svnclientadapter.javahl.AbstractJhlClientAdapter.copy(AbstractJhlClientAdapter.java:821)
          [svn] 	... 21 more
          [svn] Caused by: org.tmatesoft.svn.core.SVNCancelException: svn: authentication cancelled
          [svn] 	at org.tmatesoft.svn.core.internal.wc.SVNErrorManager.cancel(SVNErrorManager.java:37)
          [svn] 	at org.tmatesoft.svn.core.internal.wc.SVNErrorManager.cancel(SVNErrorManager.java:32)
          [svn] 	at org.tmatesoft.svn.core.internal.wc.DefaultSVNAuthenticationManager.getNextAuthentication(DefaultSVNAuthenticationManager.java:211)
          [svn] 	at org.tmatesoft.svn.core.internal.io.svn.SVNSSHConnector.open(SVNSSHConnector.java:105)
          [svn] 	at org.tmatesoft.svn.core.internal.io.svn.SVNConnection.open(SVNConnection.java:74)
          [svn] 	at org.tmatesoft.svn.core.internal.io.svn.SVNRepositoryImpl.openConnection(SVNRepositoryImpl.java:1242)
          [svn] 	at org.tmatesoft.svn.core.internal.io.svn.SVNRepositoryImpl.testConnection(SVNRepositoryImpl.java:95)
          [svn] 	at org.tmatesoft.svn.core.io.SVNRepository.getRepositoryRoot(SVNRepository.java:319)
          [svn] 	at org.tmatesoft.svn.core.internal.wc.SVNCopyDriver.copyReposToRepos(SVNCopyDriver.java:196)
          [svn] 	at org.tmatesoft.svn.core.internal.wc.SVNCopyDriver.setupCopy(SVNCopyDriver.java:629)
          [svn] 	at org.tmatesoft.svn.core.wc.SVNCopyClient.doCopy(SVNCopyClient.java:426)
          [svn] 	at org.tmatesoft.svn.core.javahl.SVNClientImpl.copyOrMove(SVNClientImpl.java:795)
          [svn] 	... 23 more
          [svn] --- Nested Exception ---
          [svn] org.tigris.subversion.svnclientadapter.SVNClientException: org.tigris.subversion.javahl.ClientException: svn: authentication cancelled
          [svn] 	at org.tigris.subversion.svnclientadapter.javahl.AbstractJhlClientAdapter.copy(AbstractJhlClientAdapter.java:824)
          [svn] 	at org.tigris.subversion.svnclientadapter.javahl.AbstractJhlClientAdapter.copy(AbstractJhlClientAdapter.java:790)
          [svn] 	at org.tigris.subversion.svnant.commands.Copy.execute(Unknown Source)
          [svn] 	at org.tigris.subversion.svnant.commands.SvnCommand.executeCommand(Unknown Source)
          [svn] 	at org.tigris.subversion.svnant.SvnTask.executeImpl(Unknown Source)
          [svn] 	at org.tigris.subversion.svnant.SvnTask.execute(Unknown Source)
          [svn] 	at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)
          [svn] 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
          [svn] 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
          [svn] 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
          [svn] 	at java.lang.reflect.Method.invoke(Method.java:597)
          [svn] 	at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
          [svn] 	at org.apache.tools.ant.Task.perform(Task.java:348)
          [svn] 	at org.apache.tools.ant.Target.execute(Target.java:357)
          [svn] 	at org.apache.tools.ant.Target.performTasks(Target.java:385)
          [svn] 	at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1337)
          [svn] 	at org.apache.tools.ant.Project.executeTarget(Project.java:1306)
          [svn] 	at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
          [svn] 	at org.eclipse.ant.internal.launching.remote.EclipseDefaultExecutor.executeTargets(EclipseDefaultExecutor.java:32)
          [svn] 	at org.apache.tools.ant.Project.executeTargets(Project.java:1189)
          [svn] 	at org.eclipse.ant.internal.launching.remote.InternalAntRunner.run(InternalAntRunner.java:423)
          [svn] 	at org.eclipse.ant.internal.launching.remote.InternalAntRunner.main(InternalAntRunner.java:137)
          [svn] Caused by: org.tigris.subversion.javahl.ClientException: svn: authentication cancelled
          [svn] 	at org.tigris.subversion.javahl.JavaHLObjectFactory.throwException(JavaHLObjectFactory.java:778)
          [svn] 	at org.tmatesoft.svn.core.javahl.SVNClientImpl.throwException(SVNClientImpl.java:1850)
          [svn] 	at org.tmatesoft.svn.core.javahl.SVNClientImpl.copyOrMove(SVNClientImpl.java:800)
          [svn] 	at org.tmatesoft.svn.core.javahl.SVNClientImpl.copy(SVNClientImpl.java:724)
          [svn] 	at org.tigris.subversion.svnclientadapter.javahl.AbstractJhlClientAdapter.copy(AbstractJhlClientAdapter.java:821)
          [svn] 	... 21 more
          [svn] Caused by: org.tmatesoft.svn.core.SVNCancelException: svn: authentication cancelled
          [svn] 	at org.tmatesoft.svn.core.internal.wc.SVNErrorManager.cancel(SVNErrorManager.java:37)
          [svn] 	at org.tmatesoft.svn.core.internal.wc.SVNErrorManager.cancel(SVNErrorManager.java:32)
          [svn] 	at org.tmatesoft.svn.core.internal.wc.DefaultSVNAuthenticationManager.getNextAuthentication(DefaultSVNAuthenticationManager.java:211)
          [svn] 	at org.tmatesoft.svn.core.internal.io.svn.SVNSSHConnector.open(SVNSSHConnector.java:105)
          [svn] 	at org.tmatesoft.svn.core.internal.io.svn.SVNConnection.open(SVNConnection.java:74)
          [svn] 	at org.tmatesoft.svn.core.internal.io.svn.SVNRepositoryImpl.openConnection(SVNRepositoryImpl.java:1242)
          [svn] 	at org.tmatesoft.svn.core.internal.io.svn.SVNRepositoryImpl.testConnection(SVNRepositoryImpl.java:95)
          [svn] 	at org.tmatesoft.svn.core.io.SVNRepository.getRepositoryRoot(SVNRepository.java:319)
          [svn] 	at org.tmatesoft.svn.core.internal.wc.SVNCopyDriver.copyReposToRepos(SVNCopyDriver.java:196)
          [svn] 	at org.tmatesoft.svn.core.internal.wc.SVNCopyDriver.setupCopy(SVNCopyDriver.java:629)
          [svn] 	at org.tmatesoft.svn.core.wc.SVNCopyClient.doCopy(SVNCopyClient.java:426)
          [svn] 	at org.tmatesoft.svn.core.javahl.SVNClientImpl.copyOrMove(SVNClientImpl.java:795)
          [svn] 	... 23 more



    Jusque là je comprends bien l'erreur mais j'avoue que je ne vois pas comment résoudre mon problème d'authentification. Voici quelques informations concernant le serveur et le script.

    Serveur SVN :
    - OVH mutualisé pro
    - accès via tunnel ssh
    - pas d'authentification particulière dans la config SVN. L'utilisateur "jabberwock" à les droits d'écritures sur le dépôt.

    Le script :
    Vous pouvez le télécharger en bas de cet article. Il faut rajouter la librairie trilead-ssh2-build213-svnkit-1.3-patch.jar dans le projet.

    Je suis preneur de toutes idées, solutions, retour d'expériences sur un problème similaire.

    Merci d'avance.

  2. #2
    Membre du Club
    Après quelques tests et recherche sur Google, je suis tombé sur le lien suivant : https://jira.atlassian.com/browse/FE-1948

    La solution est d'utiliser le client natif. Soit javahl.
    Il m'a donc suffit de changer deux variables dans le fichier de properties .

    En passant de :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    svnant.javahl=false
    svnant.svnkit=true


    à ça :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    svnant.javahl=true
    svnant.svnkit=false


    tout en ayant ajouté le jar de trilead.

    Je publierais sur mon blog une évolution du script avec notamment quelques UI via antform pour la création de tag.

    Au fait, pendant que j'y penses, y-a-t-il une zone spéciale sur laquelle je pourrais mettre à disposition mon script ? Car je vois pas l'intérêt de le garder pour moi tout seul.