it-swarm.com.de

Eclipse - Gewusst wie: "Paketdeklaration ändern in ..." für ein gesamtes Projekt

Ich habe gerade eine große Menge Quellcode in Eclipse importiert und im Grunde ist der Paketname nicht mehr gültig (der Code wurde in Ordner verschoben). Gibt es eine Möglichkeit, den gesamten Quellcode im Paket-Explorer auszuwählen und einen Hotkey zu drücken, damit alle Paketdeklarationen für mich richtig aufgelöst werden? Ich weiß, dass Sie dies beim Importieren tun können, indem Sie die Quelle auswählen und ctl-shift-o drücken. Ist aber auch die Paketdeklaration möglich?

Update: Das Refactoring der Pakete funktioniert nicht, da ich den Namen oder den Speicherort der Pakete nicht ändern möchte. Ich muss lediglich die Paketdeklaration im Java-Quellcode anpassen.

18

Wenn die Paketdeklarationen nicht mehr gültig sind, werden alle derartigen ungültigen Deklarationen in der Ansicht Problems in Eclipse angezeigt. Wenn Sie diese Ansicht nicht sehen, können Sie sie über Fenster-> Ansicht anzeigen -> Andere ... -> Probleme (auf der Registerkarte Allgemein) öffnen.

Sie können nach Problemen in der Problemansicht filtern und leicht korrigierbare korrigieren, indem Sie im Kontextmenü die Option Quick fix auswählen (mit Rechtsklick verfügbar). In Ihrem Fall sollten Sie etwas Ähnliches wie den folgenden Screenshot sehen:

Quick fix for incorrect packages

Das Anwenden der Quick Fix-Optionen ist trivial, sofern Sie wissen, welche der richtigen ist. Sie müssen entweder die Paketdeklaration in der Klasse oder den Speicherort der Klasse selbst ändern. Leider gibt es keine Möglichkeit, das Problem auf mehrere Geräte gleichzeitig zu beheben. Sie müssen die schnelle Lösung für jedes Problem anwenden.

Wenn Sie nur nach Problemen dieser Art filtern möchten, sollten Sie die Problemansicht so konfigurieren, dass alle Fehler angezeigt werden, deren Textinhalt "nicht mit dem erwarteten Paket übereinstimmt" im Fehlertext, wie in den folgenden Screenshots gezeigt:

Configure Problem Contents

Eclipse Configure Package Problems

27
Vineet Reynolds

Für dieses spezielle Problem (das normalerweise mit automatisch generierten Artefaktdateien geliefert wird) habe ich eine ordentliche Lösung gefunden.

Wenn also das Problem darin besteht, dass Ihre Paketdeklarationen "package abc;" in 200 Dateien, und es soll "package com.aa.bb.cc.abc;" sein.

Dann in Eclipse, Search-> File für "package abc;" im erforderlichen Ordner oder Paket oder im gesamten Arbeitsbereich. Wählen Sie nicht die Suchoption aus, sondern wählen Sie "Ersetzen" und setzen Sie dann "package com.aa.bb.cc.abc;" wenn er nach der Suche nach dem Ersatz fragt. Sollte den Trick tun.

21
Manish

Klicken Sie mit der rechten Maustaste auf das Paket, und wählen Sie Refactor> Umbenennen aus. Dadurch werden alle Quelldateien mit dem neuen Paketnamen aktualisiert.

5
Matt MacLean

Ich hatte gerade das gleiche Problem und schrieb dazu ein bash-Skript.

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; 
}

Der verwendete sed-Befehl ist der unter OSX. Wenn Sie gnu sed verwenden, brauchen Sie nach dem -i nicht den Parameter ''.

Fügen Sie es einfach ein und führen Sie es in dem Verzeichnis aus, in dem sich Ihre Quelle befindet. Sichern Sie Ihre Quelle zuerst, wenn Sie nicht sehr mutig sind.

Beispiel:

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

Ich sollte wirklich anfangen, dieses Zeug in einer moderneren Sprache wie Perl zu machen :)

1
JohnnyLambada

Dies sollte den Trick für Sie tun.

Importieren Sie zunächst alle Dateien in das Standardpaket und ziehen Sie sie in das neue Paket . JDT übernimmt das Refactoring und ändert die Paketdeklarationen im gesamten Projekt.

1
theblackpearl

Es ist eine alte Frage, aber ich stieß auf das gleiche Problem und schrieb ein sehr einfaches Bash-Skript. Ich hoffe es hilft jemandem.

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

Grundsätzlich durchläuft das Skript alle Java-Dateien in einem Verzeichnis, und jedes Vorkommen von package com.example.something; wird durch package com.example.something_else; ersetzt.

1
chao
  • ALT+SHIFT+R Unterstrich am Ende des Paketnamens einfügen, zweimal ENTER drücken
  • ALT+SHIFT+R lösche zweimal den Unterstrich ENTER

Fertig, wenn nur wenige Pakete vorhanden sind.