Вы можете попробовать что-то вроде:
InputStream stream = this.getClass().getClassLoader().getResourceAsStream("/images/image.jpg");
В вашем JAR-файле у вас может быть структура каталогов:
MyJAR.jar-com (файлы классов здесь) - images ---- image.jpg
blockquote>
[ главный ]. [ незначительный ]. [ выпуск ]. [ сборка ]
главный : Действительно маркетинговое решение. Вы готовы назвать версию 1.0? Компания считает это основной версией, за которую клиентам, возможно, придется заплатить больше, или действительно ли это - обновление текущей основной версии, которая может быть бесплатной? Меньше R& D решение и больше решение продукта.
незначительный : Запускается от 0 каждый раз, когда главный увеличен. +1 для каждой версии, которая получает огласку.
выпуск : Каждый раз Вы поражаете этап разработки и выпускаете продукт, даже внутренне (например, к QA), увеличиваете это. Это особенно важно для коммуникации между командами в организации. Само собой разумеется, никогда не выпускайте тот же 'выпуск' дважды (даже внутренне). Сброс к 0 на несовершеннолетнего ++ или главный ++.
сборка : Может быть пересмотр SVN, я нахожу что работы лучше всего.
Или использовать Ваше число подрывной деятельности запятой номера версии 'мысли'.. z. B.:
1.0.101//пересмотр 101, выпуск
или 1.0.101-090303//с датой выпуска, я использую это
Мы используем простой главный minor.julian_date синтаксис.
, Где;
Пример первого выпуска, продвинутого к QA на 1/15,-> 1.0.015
, Пример первого выпуска, продвинутого к Производству на 3/4,-> 1.1.063
Это не прекрасно, но удобно, поскольку мы продвигаем сборки к QA около ежедневной газеты.
Причина, почему этот вопрос существует, состоит в том, потому что у нас нет сингла согласованным способ сделать управление конфигурацией.
способом, которым мне нравится делать номер версии, является просто инкрементное целое число от 1. Я не хочу много номера версии части, который я должен буду объяснить или документ. И я не хочу использовать число версии SVN, поскольку это потребует некоторого объяснения также.
Вам были бы нужны некоторые сценарии выпуска сверху SVN, чтобы заставить это произойти
У меня есть очень мало опыта в области. Однако вот то, что я сделал бы:
, Конечно, можно просто использовать svn число пересмотра---как многие другие, предложили!!!
я надеюсь, что это помогает.
В то время как просто движение с числом пересмотра Подрывной деятельности хорошо и просто, оно действительно удаляет информацию из номера версии. Пользователи могли бы считать это плохой вещью.
я предполагаю, что Ваше веб-приложение будет иметь некоторую процедуру развертывания, так, чтобы не каждый пересмотр в Подрывной деятельности был на самом деле опубликован. Так как невозможно с "внешней стороны" (с точки зрения пользователя) определить, когда выпуски делаются, и какому количеству изменений код подвергнется между ними, это делает числа почти случайными. Они будут увеличиваться, и я предполагаю, что возможно предположить приблизительно вид расстояния от сравнения двух изменений, но не очень.
Классические номера версий имеют тенденцию "драматизировать" выпуски, так, чтобы пользователи могли создать некоторое ожидание. Легче думать, что "У меня есть версия 1.0, теперь версия 1.1 отсутствует, добавляя это и что, который звучит интересным", чем думать "вчера, что мы выполнили ТАК пересмотр 2587, сегодня это 3233, это должны быть партии лучше!".
, Конечно, эта драматизация может быть расширена также с компаниями, выбирающими номера версий, которые предназначены для звучания более интересными, чем мотивировано фактическими различиями в продукте, я предполагаю, что движение с числом пересмотра противостоит этому немного.
Управление версиями ваше дело; я поместил 1.0 на первую версию, в которой я был уверен. Можно хотеть развить его быстро с другими версиями, так как некоторые поставщики программного обеспечения дали 1.0 плохая репутация.
Вы действительно хотите некоторый способ связать номер версии с точной используемой сборкой, но Вы, вероятно, хотите, чтобы это было хорошо и просто для Ваших конечных пользователей. Рассмотрите использование чисел стандартной версии и меток репозитория SVN с включенным номером версии.
Мы провели слишком много времени, решая, когда увеличить основную версию. Некоторые магазины редко делали бы это так, у Вас будут выпуски как 1.25.3, и другие сделали бы это, навсегда выпускают предоставление Вас 15.0
, я устал от этого и убедил всех, кого основной номер версии является только годом, и несовершеннолетний является просто последовательным выпуском в течение года. Пользователям, казалось, нравился он, и это - легкая задача для придумывания следующего номера версии.
115-летний. Release.build
РЕДАКТИРОВАНИЕ
** Теперь, это было для внутреннего приложения, которое постоянно улучшалось **
, Это не будет, вероятно, работать на коммерческие приложения, где важно иметь главные версии в разное время года для маркетинга и финансовых целей.
Это довольно популярно в эти дни, чтобы просто использовать число пересмотра Подрывной деятельности.
Если это находится в SVN затем, почему бы не использовать число пересмотра SVN?
, Если Вы смотрите в правом нижнем углу этой веб-страницы, Вы будете видеть номер версии Переполнения стека, который является числом пересмотра SVN.
"Номера версий" являются вопросом для Вашей системы управления внутренней версии. Номера выпуска являются другим разговором (и должен быть СОХРАНЕН отличающимся).
Придерживаются простой системы выпуска MAJOR.MINOR (как v1.27), где ГЛАВНЫЙ уровень совместимости (версия 2.x является несовместимой с или по крайней мере абсолютно отличается от версии 1.x), и НЕЗНАЧИТЕЛЬНЫЙ Ваши выпуски bugfix или незначительные улучшения. Пока Вы следуете за форматом X.Y, можно также использовать другие системы как YEAR.MONTH (2009.12) или YEAR.RELEASE (2009.3). Но действительно Вы, вероятно, лучше всего придерживаетесь MAJOR.MINOR, если у Вас нет серьезного основания не к.
Определенно не используют ничего, что не соответствует формату X.Y, поскольку он сделает это жестким для дистрибутивов, веб-сайтов объявления, и т.д. для работы с Вами, и что один мог серьезно влиять на популярность Вашего проекта.
ответвления Использования и теги в Вашем (предпочтительно распределенный) система управления версиями для маркировки определенных чисел внутренней версии как касающийся КРУПНЫХ ФИРМ и НЕСОВЕРШЕННОЛЕТНИХ соответственно.
И да, 1.0 должно быть стабильным. Все версии должны быть стабильными, если они не отмеченная альфа, бета или RC. Используйте Альфы для known-broken-and-incomplete. Беты для известного - поврежденный. RCs для "попытки это; Вы, вероятно, определите вещи, которые мы пропустили". Что-либо без одного из них должно (идеально, конечно) быть протестированным, известным хорошее, иметь актуальное руководство, и т.д.
Вовлеките себя некоторое вдохновение из Википедии: "управление версиями программного обеспечения"
Другая "новая" и "относительно популярная" опция Семантическое Управление версиями
Сводка:
, Учитывая номер версии MAJOR.MINOR.PATCH, увеличьте:
- Основная версия, когда Вы вносите несовместимые изменения API,
- Вспомогательная версия, когда Вы добавляете функциональность назад совместимым способом, и
- Версия патча при создании назад совместимых исправлений ошибок.
Дополнительные маркировки для предварительного выпуска и метаданных сборки доступны как расширения формата MAJOR.MINOR.PATCH.
Я однажды записал тщательно продуманное "руководство по стилю управления версиями" для моего крупного проекта. Проекту не удалось осуществиться, но руководство по стилю все еще доступно онлайн . Это - мое личное мнение, возможно, это является полезным (или вдохновляющим) Вам.
Остерегаются, это - длинный текст и входит в управление версиями компонента по сравнению с управлением версиями продукта и материалом как этот. Это также выражает твердые мнения в отношении некоторых схем управления версиями, популярных в сообществе OSS, но у меня есть они, таким образом, я выражаю их.;-)
я не соглашаюсь с использованием числа пересмотра Подрывной деятельности, например. Вы могли бы хотеть поддержать выпущенную версию при продолжении разработки в СОЕДИНИТЕЛЬНОЙ ЛИНИИ, таким образом, Вы настроите ответвление обслуживания - и Ваше управление версиями числа пересмотра идет коту под хвост.
Редактирование: Как сводка, это различает исходные файлы управления версиями, компоненты и полный продукт. Это использует систему отдельного x.y versoning для компонентов и продукта с хорошей взаимозависимостью между двумя, которая делает трассировку, какая версия компонента принадлежит который тривиальная версия продукта. Это также говорит о том, как обработать альфу / бета / выпуск / циклы патча, не повреждая систему. На самом деле это - принцип работы для целого цикла разработки, таким образом, Вы могли бы хотеть избирательно подойти к выбору.;-)
Редактирование 2: , Поскольку достаточно людей нашло мою статью полезной для создания этого "Хорошим Ответом", я начал работать над статьей снова. PDF и ЛАТЕКСНЫЕ версии теперь доступны, полная перезапись включая лучший язык и объяснительную графику будет следовать, как только я могу найти время. Спасибо за Ваши голоса!
инкременты x.y.z.g
в g нестабильны. (или RCs), инкременты в z являются стабильными и средними исправлениями ошибок.
инкременты в y являются стабильными и средними новыми возможностями.
инкременты в x являются стабильной, главной версией без 100%-й обратной совместимости.
Немного полезной информации здесь:
Когда Изменение версий файла / сборки
Прежде всего, версии файлов и версий сборок не обязательно должны совпадать. Я рекомендую, чтобы версии файлов менялись с каждой сборкой. Но не меняйте версии сборок с каждой сборкой только для того, чтобы вы могли различить две версии одного и того же файла; используйте версию файла для этого. Решение о том, когда менять версию сборки, требует некоторого обсуждения типов сборок, которые следует учитывать: доставка и не доставка.
Сборки без доставки В целом, я рекомендую сохранять версии сборок, не относящихся к поставке, одинаковыми между сборками при доставке. Это позволяет избежать проблем с загрузкой сборок со строгими именами из-за несоответствия версий. Некоторые люди предпочитают использовать политику издателя для перенаправления новых версий сборок для каждой сборки. Однако я рекомендую это делать для сборок без доставки: это не позволяет избежать всех проблем с загрузкой. Например, если партнер скопирует ваше приложение, он может не знать, как установить политику издателя. Тогда ваше приложение будет сломано для них, даже если оно отлично работает на вашем компьютере.
Но если есть случаи, когда разные приложения на одном и том же компьютере должны связываться с разными версиями вашей сборки, я рекомендую давать этим сборкам разные версии сборки, чтобы можно было использовать правильную версию для каждого приложения без необходимости использовать LoadFrom. /etc.
Shipping Builds Что касается того, стоит ли менять эту версию для доставки сборок, это зависит от того, как вы хотите, чтобы привязка работала для конечных пользователей. Вы хотите, чтобы эти сборки были рядом или на месте? Много ли изменений между двумя сборками? Они собираются сломать некоторых клиентов? Вы заботитесь о том, чтобы это сломало их (или вы хотите заставить пользователей использовать ваши важные обновления)? Если да, вам следует рассмотреть возможность увеличения версии сборки. Но, опять же, учтите, что выполнение этого слишком много раз может засорять диск пользователя устаревшими сборками.
Когда вы меняете версии сборки Чтобы заменить жестко закодированные версии на новые, я рекомендую установить переменную в версию в заголовочном файле и заменить жесткое кодирование в источниках переменной. Затем запустите препроцессор во время сборки, чтобы установить правильную версию. Я рекомендую менять версии сразу после доставки, а не прямо перед этим, чтобы у вас было больше времени для выявления ошибок из-за изменений.