При попытке создать единственную банку, которая содержит Ваше приложение и его необходимые библиотеки, существует два пути (что я знаю о) сделать это. Первое Одна Банка , который использует специальный classloader для разрешения вложения банок. Второе UberJar, (или Оттенок ), который взрывает включенные библиотеки и помещает все классы в банку верхнего уровня.
я должен также упомянуть, что UberJar и Оттенок являются плагинами для Maven1 и Maven2 соответственно. Как упомянуто ниже, можно также использовать плагин блока (который в действительности намного более мощен, но намного тяжелее правильно настраивать).
Используйте утверждения для внутренних логических проверок в вашем коде и обычные исключения для ошибок, находящихся вне непосредственного контроля вашего кода.
Не забывайте, что утверждения можно включать и выключать - если вы заботиться о таких вещах, как проверка аргументов, которая должна быть явной с использованием исключений. (Однако вы можете выбрать выполнение проверки аргументов для частных методов с использованием утверждений на том основании, что нарушение в этой точке вызвано внутренней ошибкой, а не внешней ошибкой.)
В качестве альтернативы это Весь разумный (ИМО) использовать исключения для всего. Лично я вообще не часто использую утверждения, но в некоторой степени это вопрос личных предпочтений. (Конечно, могут быть объективные аргументы за и против утверждений, но это
Утверждения Java построены на основе исключений Java и обработки исключений. Действительно, когда утверждение Java терпит неудачу, результатом является исключение AssertionError, которое может быть перехвачено, как любое другое исключение Java. Ключевые различия между исключениями и утверждениями заключаются в следующем:
Язык Java обеспечивает синтаксическую поддержку утверждений в форме оператора assert
. Сравните следующее:
if (x! = Y) {
бросить новое SomeException ("x! = y");
}
утверждать x! = y;
Что наиболее важно, Java позволяет вам включать или отключать проверку утверждений глобально или для отдельных классов при запуске JVM.
Примечание: некоторые люди говорят, что вы должны всегда запускать производственный код с проверкой утверждений. выключен. Я склонен не соглашаться с этим как с общим заявлением. Если известно, что ваш производственный код стабилен и вам нужно выжать из него последний бит производительности, тогда отключение утверждений - это хорошо. Но если (скажем) снижение производительности на 10% не является реальной проблемой, я бы предпочел, чтобы приложение умирало с ошибкой утверждения, если альтернативой является продолжение и повреждение моей базы данных.
@Mario Ortegón прокомментировал так:
«Выключение» связано с тем, что утверждения могут использоваться для проверки результата оптимизированного алгоритма путем сравнения его реализации с хорошо известным, но медленным, алгоритм. Итак, в процессе разработки можно использовать метод
O (N ^ 3)
, чтобы утверждать, что алгоритмO (log N)
работает так, как задумано. Но это то, что вам не нужно в производственной среде.
Независимо от того, считаете ли вы хорошей практикой отключать утверждения в рабочей среде, это определенно плохая практика писать утверждения, которые имеют значительное влияние на производительность при включении. Почему? Потому что это означает, что у вас больше нет возможности включать утверждения в производственной среде (для отслеживания проблемы) или в стресс-тестировании / тестировании производительности. На мой взгляд, если вам нужно выполнить O (N ^ 3)
предварительное / постусловное тестирование, вы должны сделать это в своих модульных тестах.
O (N ^ 3)
, чтобы утверждать, что алгоритм O (log N)
работает должным образом. Но это то, что вам не нужно в производственной среде.
Независимо от того, считаете ли вы хорошей практикой отключать утверждения в рабочей среде, это определенно плохая практика писать утверждения, которые имеют значительное влияние на производительность при включении. Почему? Потому что это означает, что у вас больше нет возможности включать утверждения в производственной среде (для отслеживания проблемы) или в стресс-тестировании / тестировании производительности. На мой взгляд, если вам нужно выполнить O (N ^ 3)
предварительное / постусловное тестирование, вы должны сделать это в своих модульных тестах.
O (N ^ 3)
, чтобы утверждать, что алгоритм O (log N)
работает должным образом. Но это то, что вам не нужно в производственной среде.
Независимо от того, считаете ли вы хорошей практикой отключать утверждения в рабочей среде, это определенно плохая практика писать утверждения, которые имеют значительное влияние на производительность при включении. Почему? Потому что это означает, что у вас больше нет возможности включать утверждения в производственной среде (для отслеживания проблемы) или в стресс-тестировании / тестировании производительности. На мой взгляд, если вам нужно выполнить O (N ^ 3)
предварительное / постусловное тестирование, вы должны сделать это в своих модульных тестах.
Независимо от того, считаете ли вы хорошей практикой отключать утверждения в рабочей среде, это определенно плохая практика - писать утверждения, которые оказывают значительное влияние на производительность при включении. Почему? Потому что это означает, что у вас больше нет возможности включать утверждения в производственной среде (для отслеживания проблемы) или в стресс-тестировании / тестировании производительности. На мой взгляд, если вам нужно выполнить O (N ^ 3)
предварительное / постусловное тестирование, вы должны сделать это в своих модульных тестах.
Независимо от того, считаете ли вы хорошей практикой отключать утверждения в рабочей среде, это определенно плохая практика - писать утверждения, которые оказывают значительное влияние на производительность при включении. Почему? Потому что это означает, что у вас больше нет возможности включать утверждения в производственной среде (для отслеживания проблемы) или в стресс-тестировании / тестировании производительности. На мой взгляд, если вам нужно выполнить O (N ^ 3)
предварительное / постусловное тестирование, вы должны сделать это в своих модульных тестах.
O (N ^ 3)
предварительное / постусловное тестирование, вы должны сделать это в своих модульных тестах. Почему? Потому что это означает, что у вас больше нет возможности включать утверждения в производственной среде (для отслеживания проблемы) или в стресс-тестировании / тестировании производительности. На мой взгляд, если вам нужно выполнить O (N ^ 3)
предварительное / постусловное тестирование, вы должны сделать это в своих модульных тестах. Исключение - это механизм проверки того, выполняется ли реализация без каких-либо ожидаемых или неожиданных ошибок. Итак, мы видим, что исключения в основном используются для обработки даже непредвиденных условий во время выполнения приложения лучшим способом и, следовательно, эффективное использование исключений приводит к созданию надежного приложения.
Утверждения никогда не должны быть частью реализации некоторых функциональность приложения. Их следует использовать только для проверки предположений - просто чтобы убедиться, что все, что мы предполагали при разработке решения, действительно действительно и на практике.
ссылка: http://geekexplains.blogspot.com/2008/ 06 / asserions-in-java-assertions-vs.html
Утверждение предназначено только для целей отладки, и его условие срабатывания не должно выполняться (нулевой указатель, когда его не должно быть и т. Д.)
Исключение составляет особые системные события, которые могут всегда происходить: FileNotFound, ConnectionToServerLost и т. Д.