Как вставить номера версий в наши java-банки, к которым у пользователя есть доступ? - PullRequest
7 голосов
/ 07 июля 2011

У нас есть библиотека, которая выпускается с новым номером версии каждые пару недель. Проблема в том, что для сохранения номера версии в наших jar-файлах у нас есть файл version.txt, который просто содержит номер версии и затем включается в сборку. Это кажется неправильным способом сделать это, но я не могу придумать лучшего решения. Как лучше сохранить номер версии в нашей банке, чтобы, если пользователь позвонит мне, я мог легко узнать версию нашего продукта, которую он использует?

Ответы [ 4 ]

6 голосов
/ 07 июля 2011

Во-первых, убедитесь, что ваша программа или инструмент могут ПОКАЗАТЬ номер версии.Но откуда это?Мы включили его в сборку.

Просто убедитесь, что он виден где-то, когда они запускают его!Если нет ничего работоспособного, добавьте Main и сделайте его Main-Class, который просто печатает версию.Затем вы можете сказать: «Пожалуйста, введите java -jar YourLibrary.jar, и он просто запускает main и печатает вашу версию.

Вот начало кода для чтения ресурсов из вашего jar, изнутри jar, если ресурс (такой как Version.txt) находится рядом с klazz:

ClassLoader loader = klazz.getClassLoader();
InputStream in = loader.getResourceAsStream (name);

IМне нравится делать это автоматически в каждой сборке, поэтому я не забываю обрушить его.Вместо текстового файла я использую .properties ... но вы можете сделать то же самое в Version.txt.

(На самом деле, на данный момент мы включаем только время сборки. Но идея заключается в том,то же самое.)

Я делаю это так - у меня есть файл Version.properties с:

buildHost = @HOSTNAME@
buildTime = @BUILDTIME@
buildUser = @USERNAME@

И как часть сценария ANT, мы делаем:

<tstamp>
    <format property="BUILDTIME" pattern="yyyy.MM.dd.HH:mm:ss z" locale="en,UK" />
</tstamp>

<exec executable="hostname" outputproperty="HOSTNAME">
    <!-- note, this is unixey, of course -->
    <arg value="-s" />
</exec>

<property environment="env"/>
<property name="USERNAME" value="${env.USER}"/>
<property name="build.info" value="path/to/Version.properties" />
<copy file="${build.info}" tofile="${obj.dir}/${build.info}" overwrite="true">
    <filterchain>
        <replacetokens>
            <token key="BUILDTIME" value="${BUILDTIME}"/>
            <token key="HOSTNAME" value="${HOSTNAME}"/>
            <token key="USERNAME" value="${USER}"/>
        </replacetokens>
    </filterchain>
</copy>

Примечание. Вышеприведенное описание относится к конкретной платформе, но вы понимаете, как это сделать.

А то, как вы читаете файлы .properties, это еще одна небольшая куча кода, но достаточно простая.

5 голосов
/ 07 июля 2011

Вы имеете в виду ручной доступ для пользователей или также доступ из приложений Java?Вы можете создать MANIFEST.MF, который содержит номер версии.Я думаю, что каждый основной buildtool имеет некоторые средства, чтобы делать это автоматически во время процесса сборки.

2 голосов
/ 07 июля 2011
  1. Попробуйте написать себе небольшой класс, который читает ваш текстовый файл.(Еще лучше, переключитесь на файл свойств, как предлагает Дэвид.)
  2. Дайте ему основной метод, который печатает эту версию на консоли.
  3. Создайте сценарий оболочки или пакетный файл, который помещает файл .jar в classpath и вызывает ваш класс.
  4. Затем, во время процесса сборки, ваша система сборки должна вставить текущий номер / версию сборки/ временная метка в этот файл.Для ant см. Пример Davids, для Maven я рекомендую плагин Maven Build Number .
  5. Когда вам нужно увидеть версию файла .jar, запустите ваш скрипт.
1 голос
/ 07 июля 2011

Я с Reupke на этом.

Сохраните число, как вам нравится, в файле свойств или в текстовом файле, в виде обычного текста, в зашифрованном виде, во встроенной БД ... не имеет значениякак вы храните его, пока он у вас есть.

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

...