Существует ли инструмент, чтобы обнаружить, существует ли тот же класс в нескольких банках в пути к классу?

Добавить следующее:

def pad(line, limit):
    return line + " " * (limit-len(line))

def split_string (text, limit, sep= " "):

    words = text.split()
    if max(map(len,words)) > limit:
        raise ValueError("limit is too small")
    res = []
    part = words[0]
    others = words[1:]
    for word in others:
        if len(sep)+len(word) > limit-len(part):
            res.append(part)
            part = word

        else:
            part +=sep+word

    if part:
        res.append(part)

    result = [pad(l, limit) for l in res]
    return result
19
задан David Citron 25 September 2008 в 20:47
поделиться

4 ответа

Я думаю, что не было бы слишком трудно записать инструмент для Вашего сам.

можно получить записи пути к классу с System.getProperty("java.class.path");

И затем идут через банки, zip или каталоги, перечисленные туда, и собирают всю информацию о классах и findout те, которые могли бы доставить неприятности.

Эта задача заняла бы 1 или 2 дня самое большее. Затем можно загрузить этот класс непосредственно в приложении и генерировать отчет.

, Вероятно, java.class.path шоу привычки свойства все классы, если Вы работаете в некоторой инфраструктуре со сложной пользовательской загрузкой класса (например, я однажды видел приложение, которые загружают классы из LDAP), но это, конечно, работало бы на большинство случаев.

Heres инструмент Вы могли бы найти полезным, я, никогда не имею не используют его мой сам, но дают ему попытку и сообщают нам результат.

http://www.jgoodies.com/freeware/jpathreport/features.html

, Если Вы собираетесь создать свой собственный инструмент, вот код, который я использую для того же сценария оболочки, отправленного прежде, но что я использую на своей машине Windows. Это работает быстрее, когда существуют тонны файлов банки.

можно использовать его и изменить его так вместо рекурсивно обхода каталог, считать путь к классу и сравнить .class атрибут времени.

существует класс Команды, который можно разделить на подклассы в случае необходимости, я думал в - выполняют опцию "находки"

Этот мой собственный код, таким образом, это не было предназначено, чтобы быть "производством, готовым", только сделать работу.

import java.io.*;
import java.util.zip.*;


public class ListZipContent{
    public static void main( String [] args ) throws IOException {
        System.out.println( "start " + new java.util.Date() );
        String pattern = args.length == 1 ? args[0] : "OracleDriver.class";// Guess which class I was looking for :) 
        File file = new File(".");
        FileFilter fileFilter = new FileFilter(){
            public boolean accept( File file ){
                return file.isDirectory() || file.getName().endsWith( "jar" );
            }
        };
        Command command = new Command( pattern );
        executeRecursively( command, file, fileFilter );
        System.out.println( "finish  " + new java.util.Date() );
    }
    private static void executeRecursively( Command command, File dir , FileFilter filter ) throws IOException {
        if( !dir.isDirectory() ){
            System.out.println( "not a directory " + dir );
            return;
        }
        for( File file : dir.listFiles( filter ) ){
            if( file.isDirectory()){
                executeRecursively( command,file , filter );
            }else{
                command.executeOn( file );
            }
        }
    }
}
class Command {

    private String pattern;
    public Command( String pattern ){
        this.pattern = pattern;
    }

    public void executeOn( File file ) throws IOException {
        if( pattern == null ) { 
            System.out.println( "Pattern is null ");
            return;
        }

        String fileName = file.getName();
        boolean jarNameAlreadyPrinted = false;

        ZipInputStream zis = null;
        try{
            zis = new ZipInputStream( new FileInputStream( file ) );

            ZipEntry ze;
            while(( ze = zis.getNextEntry() ) != null ) {
                if( ze.getName().endsWith( pattern )){
                    if( !jarNameAlreadyPrinted ){
                        System.out.println("Contents of: " + file.getCanonicalPath()  );
                        jarNameAlreadyPrinted = true;
                    }
                    System.out.println( "    " + ze.getName() );
                }
                zis.closeEntry();
            }
        }finally{
            if( zis != null ) try {
                zis.close();
            }catch( Throwable t ){}
        }
    }
}

я надеюсь, что это помогает.

4
ответ дан 30 November 2019 в 04:33
поделиться

Помощник Пути к классу является плагином Eclipse, который помогает немногому.

3
ответ дан 30 November 2019 в 04:33
поделиться
1
ответ дан 30 November 2019 в 04:33
поделиться

jarclassfinder является другой опцией

плагина затмения
0
ответ дан 30 November 2019 в 04:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: