web-dev-qa-db-fra.com

Eclipse - Comment "Modifier la déclaration d'un package en ...." dans tout un projet

Je viens d'importer une grande quantité de code source dans Eclipse et le nom du package n'est plus valide (le code a été déplacé dans des dossiers). Existe-t-il un moyen de sélectionner tout le code source dans l'Explorateur de packages et d'appuyer sur un raccourci clavier pour que toutes les déclarations de packages soient correctement résolues? Je sais que vous pouvez le faire avec les importations en sélectionnant la source et en appuyant sur ctl-shift-o, mais est-il également possible pour la déclaration de package?

Mise à jour: La refactorisation des packages ne fonctionne pas car je ne souhaite pas modifier le nom ou l'emplacement des packages, je dois juste ajuster la déclaration du package dans le code source Java.

18
Stephane Grenier

Si les déclarations de package ne sont plus valides, toutes ces déclarations non valides apparaissent dans la vue Problems dans Eclipse. Si vous ne voyez pas cette vue, vous pouvez l'ouvrir à partir de Fenêtre-> Afficher la vue-> Autre ... -> Problèmes (sous l'onglet Général).

Vous pouvez filtrer les problèmes dans la vue Problèmes et corriger ceux qui peuvent être facilement corrigés en sélectionnant l'option Quick fix dans le menu contextuel (accessible par un clic droit). Dans votre cas, vous devriez voir quelque chose de similaire à la capture d'écran affichée ci-dessous:

Quick fix for incorrect packages

L'application des options du correctif rapide est triviale, tant que vous savez laquelle est correcte - vous devrez soit changer la déclaration du package dans la classe, soit l'emplacement de la classe elle-même. Malheureusement, il n’existe aucune option permettant de résoudre le problème entre plusieurs unités en même temps; vous devrez appliquer la solution rapide à chaque problème.

Si vous souhaitez filtrer uniquement les problèmes de cette variété, envisagez de configurer la vue Problèmes pour afficher toutes les erreurs dont le contenu textuel "ne correspond pas au package attendu" dans le texte d'erreur, comme illustré dans les captures d'écran suivantes:

Configure Problem Contents

Eclipse Configure Package Problems

27
Vineet Reynolds

Pour ce problème particulier (qui vient généralement avec des fichiers d'artefacts générés automatiquement), j'ai trouvé une solution intéressante.

Donc, si le problème est que vos déclarations de package sont "package abc;" dans 200 fichiers, et vous voulez qu'il soit "package com.aa.bb.cc.abc;"

Puis dans Eclipse, Rechercher-> Fichier pour "package abc;" dans le dossier requis ou pkg ou espace de travail entier. Ne sélectionnez pas l'option de recherche mais sélectionnez "Remplacer" puis mettez "package com.aa.bb.cc.abc;" quand il demande le remplacement après la recherche. Devrait faire l'affaire.

21
Manish

Cliquez avec le bouton droit sur le package, sélectionnez Refactor> Renommer. Cela mettra à jour tous les fichiers source avec le nouveau nom du paquet.

5
Matt MacLean

Je viens d'avoir le même problème alors j'ai écrit un script bash pour le faire.

function Java-package-update { 
  for path in $(find $1 -type f -name "*.Java"); do 
    D=$(dirname $path); 
    F=$(basename $path); 
    P=$(echo $D|tr '/' '.'); 
    if egrep -q '^\s*package\s*' $path; then 
      sed -i '' '/^\s*package\s*/s/^\(\s*package\s*\)[^;]*\(;.*\)/\1 '$P'\2/' $path; 
    else 
      echo >&2 "no package in $path";
    fi; 
  done; 
}

La commande sed utilisée est celle sous OSX. Si vous utilisez gnu sed, vous n'avez pas besoin du paramètre '' après le -i.

Il suffit de le coller et de l’exécuter sur le répertoire contenant votre source. Commencez par sauvegarder votre source, sauf si vous êtes très courageux.

Exemple:

$ cd /home/me/proj/fred/src
$ ls
com
$ cp -a com com.backup
$ Java-package-update com
$ # fingers crossed
$ diff -ru com.backup com

Je devrais vraiment commencer à faire ce genre de choses dans un langage plus moderne comme Perl :)

1
JohnnyLambada

Cela devrait faire l'affaire pour vous.

Importez d’abord tous vos fichiers dans le package par défaut, puis faites-les glisser dans le nouveau package . JDT procédera au refactoring et modifiera les déclarations de package dans le projet.

1
theblackpearl

C'est une vieille question, mais j'ai rencontré le même problème et écrit un script bash très simple. J'espère que ça va aider quelqu'un.

for i in *.Java; do
    sed -i 's/.*package com.example.something;.*/package com.example.something_else;/' $i
done

En gros, le script parcourt tous les fichiers Java d'un répertoire et chaque occurrence de package com.example.something; est remplacée par package com.example.something_else;.

1
chao
  • ALT+SHIFT+R ajouter un trait de soulignement à la fin du nom du paquet, appuyer deux fois sur ENTER
  • ALT+SHIFT+R supprimer le trait de soulignement, ENTER deux fois

Fait s'il y a peu de paquets.