Como Pegar Nome Dos pacotes e das classes num projeto

Boa tarde Galera,

Eu to com uma puta duvida aqui, ja procurei em todos os cantos e não consegui encontrar nada,
meu pró é o seguinte…

1- Estou precisando pegar o nome de todos os pacotes que eu tenho no meu projeto (Usando classe Package eu consegui pegar apenas o pacote que estou rodando a classe main). eu preciso de todos os pacotes do projeto

2- Preciso tbm pegar o nome de todas as classes que estao nesse pacote, pra futuramente usar seus metodos.

Eu sei que se eu for fazer um plugin pro eclipse eu consigo pegar essas funcionalidades, porém não é isso que eu quero a principio, a ferramenta que estou desenvolvendo utiliza as propias classes do projeto.

Agradeço sujestões.

Att. Thiago Ramalho

boa tarde kvera

precisei de algo semelhante a um tempo atrás… segue o código que fiz para listar todas as classes do projeto

import java.io.File;
import java.net.URISyntaxException;
import java.net.URL;
import java.net.URLClassLoader;

/**
 *
 * @author lb
 */
public class ListClasses
{
    public static void main( String args[] )
    {
        new ListClasses();
    }

    /**
     * ScannerProjectClasses
     *
     */
    public ListClasses()
    {
        scan( Thread.currentThread().getContextClassLoader() );
    }


    /**
     * scan
     *
     * @param classLoader ClassLoader
     */
    private void scan( ClassLoader classLoader )
    {
        if ( ! ( classLoader instanceof URLClassLoader ) )
        {
            return;
        }

        URL[] urls = ( (URLClassLoader) classLoader ).getURLs();

        for ( URL url : urls )
        {
            File location = null;

            try
            {
                location = new File( url.toURI() );
            }

            catch ( URISyntaxException e )
            {
                System.out.println( "ERROR: " + e.toString() );

                return;
            }

            if ( location.isDirectory() )
            {
                getClassesInDirectory( null, location );
            }
        }
    }

    /**
     * getClassesInDirectory
     *
     * @param parent String
     * @param location File
     */
    private void getClassesInDirectory( String parent, File location )
    {
        File[] files = location.listFiles();

        for ( File file : files )
        {
            StringBuilder builder = new StringBuilder();

            builder.append( parent ).append( "." ).append( file.getName() );

            String path = ( parent == null ? file.getName() : builder.toString() );

            if ( file.isDirectory() )
            {
                getClassesInDirectory( path, file );
            }

            else if ( file.getName().endsWith( ".class" ) )
            {
                int p = path.indexOf( "$" );

                if ( p != -1 )
                {
                    path = path.substring( 0, p );
                }

                if ( path.contains( "class" ) )
                {
                    System.out.println( path );
                }
            }
        }
    }
}

espero ter ajudado, abraço!!