Показывает ли файл manifest.mf версию jar?

вступление

Я создал сценарий, который перебирает все установленные приложения на нашем сервере приложений, и каждое приложение находит папку WEB-INF/lib. Затем для всех сторонних jar-файлов в папке lib я извлеките файл манифеста, чтобы найти ключ Implementation-Version и его значение, исходя из предположения, что только одна реализация-Version пр. манифест.mf. Пока все хорошо, но... тогда некоторые приложения каким-то образом зависят от XML и поэтому имеют в папках lib файлы jar, например

  • xalan.jar
  • xml-apis.jar
  • xerxesimpl.jar

Вопрос

Итак, тогда приступайте к чтению Jar- спецификация файла, которая, я должен признать, не дает мне понять: должен ли я найти версию jar-файла, просто прочитав одну запись в файле manifest.mf?

Пример файла manifest.mf

Это часть содержимого MANIFEST.MF для файла xalan.jar, найденного в одном из приложений. Это показывает, что сложно написать сценарий, который должен знать версию всех файлов jar.

Manifest-Version: 1.0
Created-By: 1.3.1 (IBM Corporation)
Main-Class: org.apache.xalan.xslt.Process
Class-Path: xercesImpl.jar xml-apis.jar serializer.jar

Name: org/apache/xalan/
Comment: Main Xalan engine implementing TrAX/JAXP
Specification-Title: Java API for XML Processing
Specification-Vendor: Sun Microsystems Inc.
Specification-Version: 1.3
Implementation-Title: org.apache.xalan
Implementation-Version: 2.7.0
Implementation-Vendor: Apache Software Foundation
Implementation-URL: http://xml.apache.org/xalan-j/

Name: org/apache/xpath/
Comment: XPath engine
Implementation-Title: org.apache.xpath
Implementation-Version: 2.7.0
Implementation-Vendor: Apache Software Foundation
Implementation-URL: http://xml.apache.org/xalan-j/

Name: org/apache/xml/
Comment: DTM implementation and utilities
Implementation-Title: org.apache.xml
Implementation-Version: 2.7.0
Implementation-Vendor: Apache Software Foundation
Implementation-URL: http://xml.apache.org/xalan-j/

Запоздалые мысли

Но, возможно, мне следует просто создать «черный список», какие jar-файлы игнорировать, например, все jar-файлы, связанные с XML. Я нашел эту ссылку местоположения и версии Xerces и Xalan, показывающую, что Я не могу найти версию xalan.jar в файле manifest.mf. Вместо этого мне нужно получить вывод класса Version.


person rhellem    schedule 04.11.2012    source источник
comment
Взгляните на jcabi-manifests, в нем есть служебный класс, который поможет вам чтобы прочитать все MANIFEST.MF, доступные в пути к классам, за один раз   -  person yegor256    schedule 30.12.2012


Ответы (1)


Должен ли я найти версию файла jar, просто прочитав одну запись в файле manifest.mf?

Вы «можете» найти номер версии таким образом, но номера версий в файлах JAR необязательны. (Действительно, даже идея версии «необязательна». Ничто в Java не требует от вас версии вашего кода... хотя это, несомненно, хорошая идея!)

Ваша «запоздалая» идея, безусловно, выглядит проще, хотя вам нужно будет взглянуть на соответствующую спецификацию, чтобы решить, требуется ли она для работы.

person Stephen C    schedule 04.11.2012