Получить информацию об удаленных банках - PullRequest
0 голосов
/ 25 января 2012

Я должен справиться с ситуацией, когда у меня есть несколько jar-файлов, выпущенных в различных серверных средах без надлежащей политики выпуска.

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

Я настаиваю на введении такой политики, но до тех пор я нахожусь в неведении.

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

То, что я хочу сделать, это прочитать эту информацию и создать отчет, рассказывающий об общей ситуации.

Я, конечно, могу написать сценарий самостоятельно двумя способами: - скачать баночки с каждого сервера и извлечь информацию о манифесте; - запустить удаленную утилиту, которая извлекает манифест и возвращает информацию.

Есть ли какой-нибудь инструмент / скрипт / муравейник, способный выполнить эту задачу, или я сам должен написать один?

Ответы [ 2 ]

1 голос
/ 25 января 2012

Я нашел часть ответа здесь:

Задача Ant для чтения непосредственно из файла JAR Manifest

<project>

    <!-- Get a jar -->
    <copy file="${ant.home}/lib/ant.jar" todir="."/>

    <!--
    Loads entries from a manifest file.
    @jar     The jar from where to read
    @prefix  A prefix to prepend
    -->
    <macrodef name="loadmf">
        <attribute name="jar"/>
        <attribute name="prefix" default=""/>
        <sequential>
            <loadproperties>
                <!-- Load the manifest entries -->
                <zipentry zipfile="@{jar}" name="META-INF/MANIFEST.MF"/>
                <!-- Add the prefix -->
                <filterchain>
                    <prefixlines prefix="@{prefix}"/>
                </filterchain>
            </loadproperties>
        </sequential>
    </macrodef>

    <!-- Read mf entries -->
    <loadmf jar="ant.jar" prefix="ant-mf."/>
    <!-- Print them -->
    <echoproperties prefix="ant-mf."/>

</project>

Он в значительной степени выполняет то, что говорит.

Вывод выглядит примерно так:

Buildfile: C:\dev\ant\build.xml
     [copy] Copying 1 file to C:\dev\ant
[echoproperties] #Ant properties
[echoproperties] #Wed Jan 25 12:02:09 CET 2012
[echoproperties] ant-mf.=
[echoproperties] ant-mf.Ant-Version=Apache Ant 1.8.1
[echoproperties] ant-mf.Created-By=1.5.0_22-b03 (Sun Microsystems Inc.)
[echoproperties] ant-mf.Extension-name=org.apache.tools.ant
[echoproperties] ant-mf.Implementation-Title=org.apache.tools.ant
[echoproperties] ant-mf.Implementation-Vendor=Apache Software Foundation
[echoproperties] ant-mf.Implementation-Version=1.8.1
[echoproperties] ant-mf.Main-Class=org.apache.tools.ant.Main
[echoproperties] ant-mf.Manifest-Version=1.0
[echoproperties] ant-mf.Name=org/apache/tools/ant/
[echoproperties] ant-mf.Specification-Title=Apache Ant
[echoproperties] ant-mf.Specification-Vendor=Apache Software Foundation
[echoproperties] ant-mf.Specification-Version=1.8.1

BUILD SUCCESSFUL
Total time: 2 seconds

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

1 голос
/ 25 января 2012

Вам как-то нужно попасть внутрь каждой банки. Если вы знаете их местоположение, предположим, что они развернуты в одном месте (или в корневой папке), у вас может быть сценарий, который будет использовать некоторую комбинацию jar, grep и find , вероятно.

for i in *.jar; do jar -tvf .... 

Я не могу придумать другой способ сделать это.

...