2009-08-31 11 views
30

En "Package Explorer" de Eclipse, digamos que tengo una lista de paquetes de esta manera:paquetes de cambio de nombre en Eclipse

  • com.dog
  • com.cat
  • com.frog

Si deseo cambiar el nombre de la parte "com" de la estructura del paquete para que sea "animal", entonces podría seleccionar cada paquete (arriba) y realizar un refactor> renombrar.

Si tengo muchos paquetes que comienzan con "com", ese proceso puede llevar un tiempo. ¿Existe alguna manera fácil de cambiar el nombre del nombre del paquete "com" sin tener que cambiar el nombre de cada paquete individualmente en el Explorador de paquetes? o eliminar esos paquetes de la ruta de compilación antes de cambiar el nombre?

Intenté ir al panel "Navegador" donde muestra las carpetas en una estructura de árbol, pero no se me da la capacidad de cambiar el nombre.

+0

Consulte la respuesta de Rich (http://stackoverflow.com/questions/1355818/renaming-packages-in-eclipse/1393499#1393499): si funciona para usted, puede configurarla como la oficial. – VonC

Respuesta

54

Por paquetes de matrices vacías por defecto están ocultos en el explorador de paquetes, si modifica los filtros ... en el Explorador de paquetes de desmarcar Paquetes vacíos de Padres (tercero desde la parte superior en la segunda pantalla) podrás para ver los paquetes vacíos.

package explorer filters

filters view http://archive.eclipse.org/eclipse/downloads/drops/R-2.1-200303272130/images/non-shared-project-filter.gif

continuación, puede cambiar el nombre del paquete comy comprobar el Cambiar nombre de sub-paquetes opción para forzar todos los paquetes secundarios que ser cambiado de nombre.

rename package http://archive.eclipse.org/eclipse/downloads/drops/R-3.2-200606291905/new_noteworthy/images/hierarchical_package_rename.png

Luego, cuando haya terminado vuelva a aplicar el filtro para ocultar todos esos paquetes vacíos de nuevo.

+0

Buena captura, Rich. +1. Puede ser que tu respuesta sea la oficial. – VonC

+0

¿Qué? Yo en realidad no hice el voto popular? Lo siento. Realmente quise hacerlo. Bueno, mejor tarde que nunca ...;) – VonC

+0

Eres muy amable. Justo después de llegar al límite de rep para hoy naturalmente. –

6

Parece que la actual API JDT (herramienta de desarrollo Java, la parte que incluye el paquete renamming) no solamente cambiar el nombre de un paquete a la vez (y no los sub-paquetes)

Ver:

al refactorizar un paquete, que tiene sub-paquetes, JDT crea paquetes secundarios nuevo, en lugar de simplemente cambiar el nombre de los paren t

necesitamos una API en IPackageFragment para cambiar el nombre no sólo el fragmento sino también todos los sub-paquetes.
Efectivamente, la aplicación podría cambiar el nombre de la carpeta del fragmento de paquete y luego actualizar las declaraciones de paquetes en todas las CU Contenido (incluidos los de sub-paquetes)

Así que es "de diseño" en la continuación momento (eclipse 3.5), pero se registra una mejora y se tendrá en cuenta para 3.6.

Nota: ¡esa "falta de característica" se ha observado desde 2005!

que estaba probando el nuevo paquete de cambio de nombre jerárquico y tenía dos carpetas de origen misma estructura con el paquete. Para cambiar el nombre de los paquetes en ambos tuve que hacer la misma operación dos veces.
Sería bueno obtener una pista y que se le pregunte si el paquete debe renombrar se aplicará también a la (s) otra (s) carpeta (s) de origen.

4

Cree un archivo en su paquete 'com'. Cambie el nombre y seleccione 'Renombrar subpaquetes'. Eliminar el archivo

+0

Gracias por el punto acerca de los "subpaquetes de cambio de nombre" - me ayudó a resolver por qué la solución sugerida por Andy y MatrixFrog no funcionó para mí (mi mala) – digiarnie

3

He intentado implementar un complemento para cambiar el nombre de los paquetes principales. Agrega un elemento "Cambiar el nombre del paquete principal" al menú contextual de, o puede ser activado por ctrl-7.

No he implementado el código para habilitar/deshabilitar la opción del menú en función de la selección activa (hay alguna condición de carrera que hace que el asistente deje de cancelar). Si la selección activa es un paquete con un paquete principal, seleccionará ese elemento principal e iniciará el asistente de cambio de nombre. Aún deberá seleccionar "cambiar nombre de subpaquetes" manualmente.

Aquí está el código del plugin:

package name.seller.rich.packagerenamer.actions; 

import org.eclipse.core.commands.AbstractHandler; 
import org.eclipse.core.commands.ExecutionEvent; 
import org.eclipse.core.commands.ExecutionException; 
import org.eclipse.jdt.core.IJavaElement; 
import org.eclipse.jdt.core.IPackageFragment; 
import org.eclipse.jdt.core.IPackageFragmentRoot; 
import org.eclipse.jdt.core.JavaModelException; 
import org.eclipse.jdt.internal.ui.JavaPlugin; 
import org.eclipse.jdt.internal.ui.actions.SelectionConverter; 
import org.eclipse.jdt.ui.actions.RenameAction; 
import org.eclipse.jface.viewers.IStructuredSelection; 
import org.eclipse.jface.viewers.StructuredSelection; 
import org.eclipse.ui.IWorkbenchPart; 
import org.eclipse.ui.handlers.HandlerUtil; 

public class RenameParentPackageHandler extends AbstractHandler { 

    public RenameParentPackageHandler() { 
    } 

    public Object execute(ExecutionEvent event) throws ExecutionException { 
     IWorkbenchPart activePart = HandlerUtil.getActivePart(event); 
     try { 
      IStructuredSelection selection = SelectionConverter 
        .getStructuredSelection(activePart); 

      IPackageFragment parentPackage = getParentPackage(selection); 

      if (parentPackage != null && parentPackage.exists()) { 

       RenameAction action = new RenameAction(HandlerUtil 
         .getActiveSite(event)); 

       StructuredSelection parentSelection = new StructuredSelection(
         parentPackage); 
       action.run(parentSelection); 
      } 
     } catch (JavaModelException e) { 
      logException(e); 
     } 
     return null; 
    } 

    private IPackageFragment getParentPackage(IStructuredSelection selection) { 
     IJavaElement[] elements = SelectionConverter.getElements(selection); 

     if (elements != null && elements.length > 0) { 
      if (elements[0] != null && elements[0] instanceof IPackageFragment) { 
       IPackageFragment fragment = (IPackageFragment) elements[0]; 

       String packageName = fragment.getElementName(); 
       int lastDotIndex = packageName.lastIndexOf("."); 

       if (lastDotIndex != -1) { 
        String parentPackageName = packageName.substring(0, 
          lastDotIndex); 

        IJavaElement parent = fragment.getParent(); 
        if (parent != null 
          && parent instanceof IPackageFragmentRoot) { 

         return ((IPackageFragmentRoot) parent) 
           .getPackageFragment(parentPackageName); 

        } 
       } 
      } 
     } 
     return null; 
    } 

    protected void logException(Exception e) { 
     JavaPlugin.log(e); 
    } 
} 

Aquí está el plugin.xml

<?xml version="1.0" encoding="UTF-8"?> 
<?eclipse version="3.0"?> 
<plugin> 
    <extension 
    point="org.eclipse.ui.commands"> 
     <command 
     name="Rename parent package" 
     categoryId="name.seller.rich.packagerenamer.category" 
     id="name.seller.rich.packagerenamer.renameParentPackage"> 
     </command> 
    </extension> 
    <extension 
    point="org.eclipse.ui.handlers"> 
     <handler 
     commandId="name.seller.rich.packagerenamer.renameParentPackage" 
     class="name.seller.rich.packagerenamer.actions.RenameParentPackageHandler"> 
     </handler> 
    </extension> 
    <extension 
    point="org.eclipse.ui.bindings"> 
     <key 
     commandId="name.seller.rich.packagerenamer.renameParentPackage" 
     contextId="org.eclipse.ui.contexts.window" 
     sequence="M1+7" 
     schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"> 
     </key> 
    </extension> 
    <extension 
    point="org.eclipse.ui.menus"> 
     <menuContribution 
     locationURI="popup:org.eclipse.ui.popup.any?after=additions"> 
     <command 
      commandId="name.seller.rich.packagerenamer.renameParentPackage" 
      mnemonic="K"> 
     </command> 
     </menuContribution> 
    </extension> 
</plugin> 

Y el manifiesto:

Manifest-Version: 1.0 
Bundle-ManifestVersion: 2 
Bundle-Name: Classwizard 
Bundle-SymbolicName: name.seller.rich.packagerenamer; singleton:=true 
Bundle-Version: 1.0.0 
Require-Bundle: org.eclipse.ui, 
org.eclipse.core.runtime, 
org.eclipse.jdt.core;bundle-version="3.5.0", 
org.eclipse.core.expressions;bundle-version="3.4.100", 
org.eclipse.jface.text;bundle-version="3.5.0", 
org.eclipse.jdt.ui;bundle-version="3.5.0", 
org.eclipse.ui.ide;bundle-version="3.5.0", 
org.eclipse.ui.editors;bundle-version="3.5.0", 
org.eclipse.core.resources;bundle-version="3.5.0" 
Eclipse-AutoStart: true 
Bundle-RequiredExecutionEnvironment: JavaSE-1.6 
+0

Y ... +1. Esta vez, * debe * contar en su límite diario;) – VonC

+0

muchas gracias, ahora solo necesitamos 562 más –

0

Umm, no sé lo que todos los demás aquí está haciendo, pero en Eclipse Juno haga clic derecho en el paquete -> refactor -> cambiar el nombre

A continuación, simplemente cambie el nombre de sus paquetes y marque la casilla si desea que los cambios entren en cascada en la jerarquía.

Cuestiones relacionadas