JarScan, просканируйте все файлы JAR во всех подпапках для определенного класса

Использование @root решает проблему, см. Ниже, однако мне все еще интересно, почему ваш код работает таким образом - но я довольно давно не использовал handelbarsjs

<table class="table">
            <thead>
                <tr>
                    <th>col-0</th>
                    <th>col-1</th>
                    <th>col-2</th>
                    <th>col-3</th>
                    <th>col-4</th>
                </tr>
            </thead>

            <tbody>
                {{#each dummyArray}}
                <tr>
                    <td>row</td>
                    {{#each @root.dummyArray2}}
                    <td>
                        {{#each @root.dummyArray3}}
                            {{this.data}}
                        {{/each}}
                    </td>
                    {{/each}}
                </tr>
                {{/each}}
            </tbody>

        </table>

Править : код ниже заполняет только ранее пустые ячейки, оставляя остальные пустыми ... странно

<tbody>
                {{#each dummyArray}}
                <tr>
                    <td>row</td>
                    {{#each ../dummyArray2}}
                    <td>
                        {{#each ../dummyArray3}}
                            {{this.data}}
                        {{/each}}
                    </td>
                    {{/each}}
                </tr>
                {{/each}}
            </tbody>
9
задан Peter Mortensen 31 March 2011 в 17:07
поделиться

7 ответов

Что-то вроде:

find . -name '*.jar' | while read jarfile; do if jar tf "$jarfile" | grep org/jboss/Main; then echo "$jarfile"; fi; done

Вы можете обернуть это так:

jarscan() {
  pattern=$(echo $1 | tr . /)
  find . -name '*.jar' | while read jarfile; do if jar tf "$jarfile" | grep "$pattern"; then echo "$jarfile"; fi; done
}

А затем jarscan org .jboss.Main будет искать этот класс во всех jar-файлах, найденных в текущем каталоге

17
ответ дан 4 December 2019 в 07:24
поделиться

Если вам нужен только результат, вы можете установить agentransack http://www.mythicsoft.com/agentransack/ и выполнить поиск по тексту. Agentransack выполняет поиск внутри файлов jar и zip.

2
ответ дан 4 December 2019 в 07:24
поделиться

Непосредственно не отвечая на ваш вопрос, но, возможно, это решит вашу проблему: вы можете распечатать местоположение (например, банку файл), из которого был загружен определенный класс, добавив в код простую строку:

System.err.println(YourClass.class.getProtectionDomain().getCodeSource());

Тогда вы точно будете знать, откуда он.

4
ответ дан 4 December 2019 в 07:24
поделиться

Несколько лет назад я написал утилиту classfind для решения подобных проблем. Установите ваш classpath так, чтобы он указывал на ваш набор .jar, и classfind скажет вам, в каких банках он найдет определенный класс.

example% classfind -c Document
/usr/java/j2sdk1.4.0/jre/lib/rt.jar -> org.w3c.dom.Document
/usr/java/j2sdk1.4.0/jre/lib/rt.jar -> javax.swing.text.Document
1
ответ дан 4 December 2019 в 07:24
поделиться

Теперь, чтобы ответить на этот вопрос, вот простая команда оболочки, которая сделала это за нас.

for jarFile in $(
    ls -R | 
    awk '
        match($0, ".*:") { 
            folder=$0 
        } 
        ! match($0, ".*:") {
            print folder$0 
        }' | 
        grep "\.jar" | 
        sed -e "s/:/\//g"
); 
do  
    unzip -l $jarFile; 
done | 
awk '
    match($0, "Archive.*") { 
        jar=$0 
    } 
    ! match($0, "Archive.*") {
        print jar" : "$0 
    }' | 
grep org.jboss.Main
1
ответ дан 4 December 2019 в 07:24
поделиться

Инструмент JAR Explorer очень полезен.

Он открывает окно графического интерфейса пользователя с двумя панелями. Вы можете выбрать каталог, инструмент просканирует все файлы JAR в этом каталоге, а затем позволит вам найти определенный класс. Затем загорится нижняя панель со списком совпадений для этого класса во всех отсканированных файлах JAR.

3
ответ дан 4 December 2019 в 07:24
поделиться

Вы также можете взглянуть на инструмент Java JarScan .

Можно искать по имени класса и по пакету.

Это очень помогает когда Total Commander недоступен и разрешено выполнение только Java.

1
ответ дан 4 December 2019 в 07:24
поделиться
Другие вопросы по тегам:

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