Зависимости времени сборки Java и времени выполнения - PullRequest
2 голосов
/ 29 июня 2009

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

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

Я прав?

Ответы [ 2 ]

6 голосов
/ 29 июня 2009

Я прав?

Да.

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

Я бы назвал это путь выполнения . В любой момент исполняемый код достигнет некоторого

a.A a = new a.A();

И если класса a.A нет в вашем пути к классам, он выдаст исключение Runntime. Это означает, что вы должны запустить и достичь этой точки, чтобы получить ошибку. Если ваша программа не достигает этой точки, она никогда не завершится неудачей.

2 голосов
/ 29 июня 2009

Возможно, вы уже делаете это, но в тех случаях, когда класс может находиться или не находиться в пути к классам во время выполнения, я бы порекомендовал использовать ClassLoader для явной загрузки класса, предпринимая соответствующие действия, если класс не найден (как не похоже на ошибку в вашем случае). Это сделает код намного более понятным для чтения, чем что-то вроде:

try {
  new MyClass(); // Could potentially thrown a ClassNotFoundException.
  // ... yada yada
} catch(ClassNotFoundException ex) {
  // Do something else instead.
}

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

...