2012-12-19 17 views
17

Ho un gruppo di file sorgente *.java che contengono classi in vari pacchetti. Sto cercando di importare tutti questi file in progetti Eclipse, ma Eclipse li inserisce sempre nel pacchetto predefinito.Importa file .java nel pacchetto corretto

Come posso dire a Eclipse di posizionare ognuno dei file nella sottodirectory del pacchetto appropriato, quindi non devo creare manualmente tutti i vari pacchetti?

Ho provato il importazione da file system caratteristica così come la copia dei file nel progetto, nel qual caso, collocare i file nel pacchetto default piuttosto che quelli ecplicitly indicato nella dichiarazione package in cima ad ogni file.

correlate, al fine domande trattare solo con referencing packages outside of the project's src directory hierarchy, manually creating files in the suitable package directory, missing import statements o bulk-renaming packages, ma non sembra questo problema è già stato discusso.

Aggiornamento: Come richiesto nei commenti, qui ci sono alcuni file di esempio:

Test1.java

package some.random.pkg; 

public class Test1 { 
} 

Test2.java

package some.other.pkg; 

public class Test2 { 
} 

Test3.java

package yet.another.pkg; 

public class Test3 { 
} 

Inserirli tutti nella stessa directory, quindi provare a importarli in un progetto Java in Eclipse senza creare manualmente le directory per i vari pacchetti.

Aggiornamento 2: Per chiarire la scala, supponiamo che ci siano in realtà circa 100 file come questi (ovviamente, con più contenuti ;-)) su base settimanale, motivo per cui sto cercando una soluzione automatizzata.

+3

Penso che questo è un pò impossibile, è necessario creare un programma che avrebbe automatizzare queste cose per voi. –

+2

puoi aggiungere alcune strutture del tuo mazzo di file java con i suoi pacchetti [email protected] – gks

+0

@Mahan: Beh, sì, sto cercando una rispettiva funzione in Eclipse; poiché sono disponibili tutti i tipi di funzionalità di importazione, è inconcepibile che qualcosa di diretto non ci sia. –

risposta

8

ero un po 'annoiato, così ho creato un'applicazione Java per ottenere tutti i file .java dalla sua cartella di lavoro corrente e metterli nelle sottocartelle appropriate.

È quindi possibile copiare/incollare le cartelle/i file appena creati in Eclipse.

codice sorgente e .jar eseguibile: https://github.com/felipeweber/OrganizeJavaSources

per eseguirla si copia/incolla il .jar eseguibile nella cartella si dispone di tutti i file .java in, ed eseguirlo con java-jar OrganizeJavaSources.jar da un prompt o da una riga di comando. Dovrebbe funzionare sia in Linux che in Windows (e probabilmente anche in MacOS).

Nei miei test ha funzionato perfettamente con file sani. Si prega di notare che non ho fatto alcun trattamento di errore e quindi quarto, ma sentiti libero di contribuire.

Buona fortuna

+2

Bel lavoro! Sarebbe ancora meglio se potessi convertire questo in un plugin Eclipse che verrebbe eseguito su import ... :-) –

+0

Mi piacerebbe usarlo in un contesto educativo. È permesso? –

+0

Indipendentemente dalla domanda di cui sopra, ho intenzione di accettare questo come la risposta selezionata. Detto questo, non era certo mia intenzione chiedere un * per favore scrivi il mio codice per me * tipo di domanda, anche se questa risposta, alla fine accettata, in effetti la rende una.Tuttavia, poiché la mia domanda in quanto tale non può essere risolta (caratteristica precedentemente esistente in Eclipse), questa risposta è la più utile e più vicina alla risposta originariamente sperata. –

2

Beh, siamo programmatori qui, giusto? per cui faccio una ricerca è piuttosto difficile trovare questo tipo di funzionalità in qualsiasi IDE perché un programmatore deve essere avvisato che ha messo un file java in un pacchetto errato e non deve organizzarlo automaticamente per il programmatore.

Bene, ti suggerisco di creare un semplice programma di console java che possa fare la manipolazione dei file per te e so che sarebbe facile per te. questo sarà il possibile algoritmo del programma

  1. Leggere un file .java
  2. Controllare la linea package fino a quando il terminatore ; su quel file .java
  3. spostare tale file in base al nome del pacchetto, ben sostituendo . con separatori di directory può essere utilizzato come indirizzo in cui verrà riposizionato il file.
  4. Creare la cartella se la cartella di rilocazione del file non esiste
  5. Farlo ripetutamente fino a quando tutti i file vengono riposizionati.

Bene anche a me questo tipo di funzionalità non solo in eclissi ma anche su altri IDE sta ben aspettando ulteriori risposte in questa domanda.

+2

Grazie; Ho fatto più o meno le stesse ipotesi su come funzionerebbe un rispettivo algoritmo. Mi piacerebbe evitare questo lavoro simile a quello di una caldaia, e quindi cercare un modo per farlo che spero sia già integrato in Eclipse nella mia domanda. –

+0

Bene, questa è una funzione promettente per qualsiasi IDE ma per me iniziare a creare già l'applicazione per eseguire questa operazione è molto meglio che aspettare una cosa forse non esiste –

1

Quando un file è nel pacchetto errato, Eclipse ti offrirà di correggere l'errore spostando il file. Con la funzione "Correzione rapida" (seleziona nella vista Errori, premi CTRL + 1), puoi spostarli facilmente. Prova a selezionarli tutti in una volta, forse la tua versione di Eclipse è più recente della mia e può risolverli tutti in una volta. In caso contrario, è ancora più veloce della creazione manuale del pacchetto.

+0

Purtroppo, anche Eclipse Juno dice * I problemi selezionati non hanno una soluzione rapida applicabile comune *, anche se gli errori del compilatore sono gli stessi e differiscono solo dal pacchetto dichiarato citato per ciascun file. Facendolo file per file per circa 100 file (su base settimanale ...) è ancora un po 'noioso per i miei gusti ;-) –

2

In base a questo link è possibile ottenere ciò che si desidera effettivamente fare.

File -> Nuovo progetto/Web dinamico Progetto

poi

File -> Nuova cartella, fare clic su "Avanzate" e selezionare "Link alla cartella nel file system".

Dopo di che fare clic destro sulla cartella e selezionare BuildPath -> Usa come cartella di origine .. Questo è ..

O

è possibile creare una nuova cartella, copiare più in alto cartella contenente * .java files e incollalo. Quindi fai clic destro su di esso, selezionare BuildPath -> Usa come cartella di origine ...

Spero che funzioni per voi !!

+0

Entrambe queste soluzioni non funzionano per me. Il compilatore emette l'errore * Il pacchetto dichiarato "..." non corrisponde al pacchetto previsto "" * per ciascuno dei file '.java' (dove * ... * è il rispettivo pacchetto per ogni file). –

+0

Ohh .. vedendo i tuoi aggiornamenti alla domanda Ora capisco che vuoi che le directory vengano create automaticamente nella gerarchia delle classi bunch java secondo i loro pacchetti menzionati ... – DarkHorse

+0

Il tuo problema è già stato discusso [qui] (http://stackoverflow.com/questions/6865694/eclipse-how-to-change-package-declaration-to-across-an-whole-project) e [qui] (http://stackoverflow.com/questions/6761639/eclipse-ide-quick- correggere tutto). Quindi, tutto sommato, dobbiamo aspettare che la funzione in eclipe arrivi :) – DarkHorse

1

Quindi questo è quello che ho fatto ...

  1. Nuovo -> Java Progetto (opzioni: Fare clic "cartella di uso progetto come root per fonti e file di classe")

  2. Successivo

  3. Selezionare "link fonte aggiuntiva" (sotto i dettagli)

  4. Browse "Linked posizione della cartella" e selezionare la cartella superiore (che contiene tutti i pacchetti, ecc)

  5. Fine

Se avete già un progetto creato poi ...

  1. Fare clic con il tasto destro del mouse sul progetto in package explorer e selezionare Proprietà

  2. Sel ect "Percorso Java Build"

  3. Selezionare "Link Source" (nella scheda Origine)

  4. Browse "Linked cartella percorso" e selezionare la cartella superiore (che contiene tutti i pacchetti, ecc)

  5. Fine

Se i file non sono nelle directory che corrispondono ai pacchetti definiti al loro interno, quindi eseguire un backup dei file (vale a dire tutti copiano in un'altra directory) e provare questo:

compilare il seguente programma con javac MakePackDirs.java ed eseguire utilizzando MakePackDirs java e strutture di directory e file verrà creato in base al pacchetto d dichiarazioni e quindi utilizzare la procedura come sopra descritto.

import java.util.regex.*; 
import java.util.*; 
import java.io.*; 

public class MakePackDirs { 

    public static void main(String[] args) throws Exception { 

     String pkg; 

     for (File f : new File(".").listFiles(
      new FilenameFilter() { 
       public boolean accept (File dir, String name) { 
        return name.endsWith(".java"); 
       } })) { 

      if (f.isDirectory()) continue; 

      System.out.println("Processing " + f.getName()); 
      Scanner s = new Scanner(f); 
      try { 
       Pattern p = Pattern.compile("^[ ]*package +[^;]*", 
          Pattern.MULTILINE); 
       if ((pkg = s.findWithinHorizon(p,0))==null) continue; 
      } 
      finally { 
       s.close(); 
      } 

      System.out.println("Found " + pkg); 

      pkg = pkg.split(" ")[1]; 
      pkg = pkg.replaceAll("\\.","/").trim(); 

      System.out.println("Creating " + pkg); 

      File dir = new File(pkg); 
      boolean created = dir.mkdirs(); 

      if (!created && !dir.exists()) 
       throw new Exception("Can't create package directory"); 

      // Moving file 
      File dest = new File(dir, f.getName()); 
      boolean renamed = f.renameTo(dest); 

      if (!renamed) 
       throw new Exception("Can't move file to " + dest.getPath()); 

      System.out.println(f.getName() + " moved to " + dir.getPath()); 
     } 
    } 
} 
+0

Questo non funziona. Continuo a ricevere l'errore del compilatore "Il pacchetto dichiarato ... non corrisponde al pacchetto previsto ..." e tutti i file dalla cartella di origine vengono aggiunti a un singolo pacchetto anziché i singoli pacchetti dichiarati nelle direttive 'package' nei vari file di origine. –

+0

Funziona per me. Quindi, i tuoi file sono nelle directory appropriate (vale a dire ogni file sorgente in una directory secondo quanto definito nella direttiva del pacchetto per quel file sorgente)? Se no, allora quello è come funziona, perché non funziona per te! – xagyg

+0

No, tutti i file si trovano in una directory, indipendentemente dal loro spazio dei nomi dichiarato. Per favore vedi la mia domanda: "Inserisci tutti i [file di esempio, con pacchetti dichiarati in modo diverso] nella stessa directory, quindi prova ad importarli in un progetto Java in Eclipse senza creare manualmente le directory per i vari pacchetti." per replicare la mia situazione. –

2

Hai bisogno di un trucco. spero che si sta utilizzando Linux, altrimenti sta per essere più difficile :)

1- creare un piccolo programma Java che legge ed esegue un file .sh Ecco un frammento di codice che mostra come si può atemp di leggere da un sceneggiatura

ProcessBuilder pb = new ProcessBuilder("myshell.sh", "myArg1", "myArg2"); 
Process p = pb.start(); 

2- creare lo script .sh e assicurarsi che Java è in ripresa correttamente (Basta posizionare qualche messaggio eco nella sceneggiatura e assicurarsi che il suo corso di stampa)

3- l'obiettivo con questo hack è quello di provare a utilizzare un grep che legge tutto i file con l'estensione .java e collegarlo al programma mv che li inserirà nella cartella corretta.

4- Il modo in cui si scoprirà come mettere cosa in quale cartella (pacchetto) sarà possibile perché è possibile leggere ciascuno dei file utilizzando cat e in questo modo determinare dove dovrebbero andare. Il comando mkdir dovrebbe aiutarti a creare correttamente le cartelle prima di spostare i file.

5- Se non si è sicuri di questa soluzione, lasciatemi dire che si tratta di un'attività estremamente complessa che richiede di esaminare bene e riconoscere tutti i modelli. Sono fiducioso che sia possibile e che tu possa farlo usando una logica di piping condizionale e qualche musica rilassante rilassante per aiutarti a concentrarti.

Qui si finisce un po 'BASH guide per rinfrescare la mente

Buona fortuna, e buon 2013