Как узнать, что все классы / jar-файлы использует Java-приложение

1

Я из C/C++, и у меня есть работа exp на Java. Теперь я перехожу на язык Java (поскольку я чувствую, что должен был сделать это долгое время назад). В C/C++, если приложение связано с внешними разделяемыми библиотеками (.so,.a,.sl), мы можем знать эту зависимость с помощью команды ld.

Мой вопрос в том, имеет ли сервер.jar аналогичные цели? Например, если java-приложение зависит от 1.jar, 2.jar и т.д., Эти файлы jar "привязаны" навсегда к Java-приложению (в результате чего файлы Bigger, например.a, становятся популярными для приложения c/C++, что приводит к большему исполняемый файл) или динамически (такие же, как.so/.sl, загружаются "на лету", а не часть основного приложения c/C++).

Кроме того, можно ли перечислять все файлы jar, от которых зависит приложение java?

В java по умолчанию приложение импортирует пакет java.lang. *, Этот пакет находится внутри файла jar? Если да, то какие файлы jar соответствуют этому пакету?

Большое спасибо!

Vipin

  • 1
    На первый вопрос можно ответить простым экспериментом. Вопрос второй, нет, поэтому существуют такие вещи, как Maven. Вопрос третий, проверьте каталоги установки JDK или JRE. Ищите файлы jar. Grep через их перечисленное содержимое. Ответы на вопросы!
  • 0
    Ответ может быть еще более сложным, если учесть, что [1] у вас могут быть разные загрузчики классов, и [2] у вас могут быть дублированные классы из разных jar-файлов, и [3] вы можете указать класс, который будет динамически вызываться с помощью forName () при выполнении. время
Теги:
class
jar

2 ответа

0

Вы можете проверить файл манифеста в папке META-INF. он должен содержать декларацию для зависимостей приложения. примером будет, class-path - это требования библиотеки библиотеки:

manifest-Version: 1.0
Built-By: melt321
Build-Jdk: 1.6.0_35
Class-Path: dependency-jars/log4j-1.2.17.jar
Created-By: Apache Maven
Main-Class: com.example.org.Tester
Archiver-Version: Plexus Archiver

или если jar использует maven, вы можете проверить pom.xml

0

Встраиваются ли вещи в ваше приложение? Точно нет. Это ваша ответственность как разработчика и развертывателя, чтобы отслеживать, какие файлы jar необходимы приложению.

Библиотека по умолчанию (как определено в документах API JDK) содержится в файле jar, который развертывается как часть установки JVM, поэтому вам никогда не придется отправлять их.
Аналогично, для Java EE существует стандартный набор, который сервер должен предоставить, определенный в документах API Java EE API, которые вам также не нужно отправлять.
Подумайте об этих классах как динамических библиотеках, которые поставляются с операционной системой при написании приложения C. Вы не отправляете их, вы полагаетесь на то, что они там. Если это не так, вы получите сообщение об ошибке, что операционная система (в случае Java JVM) является неправильной версией.
Существуют некоторые инструменты, которые могут извлекать информацию об импорте из классов Java. И с этой информацией можно было бы взять каталог, полный файлов jar, и написать программное обеспечение, которое будет определять, какой из них вам нужен, но вы должны просто отслеживать это при начале написания.

  • 0
    Для JEE это не просто «не нужно» (JEE API), это «не нужно».

Ещё вопросы

Сообщество Overcoder
Наверх
Меню