IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

Eclipse Java Discussion :

[jdt] suppression d'une ressource


Sujet :

Eclipse Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 14
    Points : 12
    Points
    12
    Par défaut [jdt] suppression d'une ressource
    Bonjour,

    J’ai un plugin Eclipse (m2eclipse pour ceux qui connaissent) qui ajoute des librairies dans un container (container Maven) à chaque modification d’un fichier xml (à chaque fois qu’on y indique qu’on ajoute une dépendance en fait).

    Comme j’utilise ASTK (pour déployer sur un serveur WebSphere 6.1), je suis en Eclipse 3.2 et ne peut pas utiliser WTP 2.0 (arrêtez-moi si vous savez quelque chose que j’ignore) qui m’aurait permis d’ajouter mon container en dépendance Web.

    Je voudrais donc faire un plugin qui récupère les entrées du container Maven pour les mettre dans le container web.

    J’ai récupéré les sources d’un plugin qui faisait un lien entre les entrées des deux containers mais ASTK ne supporte pas les ressources liées.

    J’ai donc modifié ça de cette façon :
    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
     
    	private void traverse(IResource resource) throws CoreException, JavaModelException {
    		if (resource instanceof IProject) {
     
    			IJavaProject jProject = JavaCore.create((IProject) resource);
     
    			if (null != jProject) {
     
    				IFolder outFolder = jProject.getProject().getFolder(getOutputFolder(jProject));
    				deleteLinks(outFolder);
     
    				IClasspathContainer container = JavaCore.getClasspathContainer(new Path(CONTAINER_ID), jProject); // container Maven
    				if (null == container) {
     
    					return; // TODO show some meaningful message that maven2 library container is missing.
    				}
     
    				IClasspathEntry[] classpath = container.getClasspathEntries();
     
     
     
    				for(IClasspathEntry entry : classpath) {
     
    					if(entry.getEntryKind() != IClasspathEntry.CPE_PROJECT) {
     
    						IPath iPath = entry.getPath(); // chemin absolu du jar à copier
    						String target = getOutputFolder(jProject) + iPath.lastSegment(); // chemin relatif du jar dans WEB-INF
    						IFile file = jProject.getProject().getFile(target);
     
    						System.out.println("1. " + iPath.toString()); // C:/Documents and Settings/mcn/.m2/repository/monApplication/lib/applicationsWeb/castor/0.9.6/castor-0.9.6.jar
    						System.out.println("2. " + getOutputFolder(jProject)); // src/main/webapp/WEB-INF/lib/
    						System.out.println("3. " + iPath.lastSegment()); // castor-0.9.6.jar
    						System.out.println("4. " + target); // src/main/webapp/WEB-INF/lib/castor-0.9.6.jar
     
     
    //						file.createLink(iPath, IResource.REPLACE, this.monitor); // ce qui fâche ASTK, on remplace donc par des vraies copies et plus des liens
    						FileInputStream fis = null;
    						try {
    							fis = new FileInputStream (iPath.toFile()); // on met le contenu du jar dans un inputStream
    							if (!file.exists()) {
    								file.create(fis, IResource.NONE, monitor); // on le crée dans le workspace
    								System.out.println("J'ai créé " + file.getName());
    							}
    						} catch (FileNotFoundException e) {
    							System.out.println ("Le fichier n'a pas été trouvé");
    							e.printStackTrace();
    						} 
    						System.out.println("La ressource " + file.getName() + " est synchronisée = " + file.isSynchronized(IResource.DEPTH_ZERO)); // toujours à vrai
    					}
     
    				}
    			}			
    		}
    	}
     
     
    	private void deleteLinks(IFolder outFolder) throws CoreException {
     
    		IResource[] resources = outFolder.members(IFolder.NONE);
     
    		for(IResource res : resources) {
     
    			try {
    				res.delete(false, monitor);
    				System.out.println("J'ai effacé " + res.getName());
     
    			} catch (Exception e) {
    				System.out.println("Exception : impossible de supprimer " + res.getName());
    			}
    			System.out.println("La ressource " + res.getName() + " est synchronisée = " + res.isSynchronized(IResource.DEPTH_ZERO)); // toujours vrai...
    		}
    	}
    Malheureusement, la synchronisation ne se passe pas bien. Dans le cas de la création d’un projet, l’ajout et la suppression des jar se fait normalement dans le répertoire, sans toutefois qu’ils apparaissent dans le container web.

    Si je relance le workspace, ça se complique. Déjà, il a un problème pour supprimer le premier jar (Eclipse doit avoir la main dessus). Toutes les librairies sont rentrées dans le container web. En cas de suppression de l’une d’elle via mon fichier xml (qui devrait donc entrainer la suppression dans mon container Maven puis dans le container web et dans mon répertoire), le fichier est bien supprimé du répertoire WEB-INF/lib mais pas dans le container web (j’ai donc une librairie introuvable).

    Quelqu’un aurait une idée sur comment faire synchroniser tout ça ?

    Merci d'avance

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 14
    Points : 12
    Points
    12
    Par défaut
    Bon et bien, j'ai trouvé quelque chose qui marche (en tout cas, le répertoire lib dans lequel les librairies sont ajoutées ou retirées comme je le veux est bien exporté dans mon WAR). ça me parait bien lourd tout ça, mais ça me dépanne...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    				IClasspathContainer containerWeb = JavaCore.getClasspathContainer(new Path(CONTAINER_WEB_ID), jProject);
                                    // CONTAINER_WEB_ID = "org.eclipse.jst.j2ee.internal.web.container";
    				IJavaProject [] listeProjets = new IJavaProject [1];
    				listeProjets [0] = jProject;
    				IClasspathContainer [] listeContainer = new IClasspathContainer [1];
    				listeContainer [0] = JavaCore.getClasspathContainer(new Path(getOutputFolder(jProject)), jProject);
    				JavaCore.setClasspathContainer(containerWeb.getPath(), listeProjets, listeContainer, monitor);

Discussions similaires

  1. Combler les trous lors d'une suppression dans une table
    Par Billybongjoe dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 08/04/2004, 14h02
  2. Accès à une ressource ?
    Par Neilos dans le forum C++Builder
    Réponses: 2
    Dernier message: 20/03/2004, 16h29
  3. Réponses: 6
    Dernier message: 04/03/2004, 09h35
  4. [LG]suppression dans une liste chainée
    Par mister_dsg dans le forum Langage
    Réponses: 9
    Dernier message: 16/12/2003, 21h20
  5. Inclure une dll dans une ressource
    Par bgcode dans le forum C++Builder
    Réponses: 4
    Dernier message: 21/08/2003, 11h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo