2015-12-22 8 views
0

Я строю uber jar, и я пытаюсь вытащить информацию о версии файла манифеста суб-библиотек. По какой-то причине информация о манифестах больше не появляется в банке.Как получить субблочные манифесты из uber jar

Это был проект, построенный с помощью плагина войны и работавший, однако я не могу понять, как получить такое же поведение с плагином jar.

Адрес этой конфигурации сейчас. Я не уверен, почему он больше не работает.

Как я могу извлечь информацию о манифесте библиотеки или что происходит, что делает это неработоспособным?

Исполняемый файл ПОМ

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <executions> 
       <execution> 
        <id>package-jar-with-dependencies</id> 
        <phase>package</phase> 
        <goals> 
         <goal>single</goal> 
        </goals> 
        <configuration> 
         <appendAssemblyId>false</appendAssemblyId> 
         <descriptorRefs> 
          <descriptorRef>jar-with-dependencies</descriptorRef> 
         </descriptorRefs> 
         <archive> 
          <manifest> 
           <mainClass>com.clearwateranalytics.perseus.worker.PerseusWorker</mainClass> 
           <addDefaultImplementationEntries>true</addDefaultImplementationEntries> 
           <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries> 
          </manifest> 
          <manifestEntries> 
           <Implementation-Build>${build.number}</Implementation-Build> 
           <Build-Date>${maven.build.timestamp}</Build-Date> 
          </manifestEntries> 
         </archive> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

Библиотека ПОМ

<build> 
    <resources> 
     <resource> 
      <directory>${project.basedir}/src/main/java</directory> 
      <includes> 
       <include>**/*.properties</include> 
      </includes> 
     </resource> 
    </resources> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-jar-plugin</artifactId> 
      <configuration> 
       <archive> 
        <manifestEntries> 
         <Implementation-Build>${build.number}</Implementation-Build> 
        </manifestEntries> 
       </archive> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

метод Библиотека для получения информации о сборке

private static String getBuildNumber() 
{ 
    try 
    { 
     Enumeration<URL> resources = ServerVersionDao.class.getClassLoader().getResources("META-INF/MANIFEST.MF"); 
     while (resources.hasMoreElements()) 
     { 
      try 
      { 
       Manifest manifest = new Manifest(resources.nextElement().openStream()); 
       Attributes attributes = manifest.getMainAttributes(); 
       if ("perseus-server-lib".equals(attributes.getValue("Implementation-Title"))) 
       { 
        String versionNumber = getVersion(ServerVersionDao.class); 
        String buildNumber = attributes.getValue("Implementation-Build"); 
        String build = ""; 
        if (versionNumber != null) 
         build += versionNumber; 
        if (buildNumber != null) 
         build += " b" + buildNumber; 

        if (!build.trim().isEmpty()) 
         return build; 
       } 
      } 
      catch (IOException ex) 
      { 
      } 
     } 
    } 
    catch (Exception ex) 
    { 
    } 
    throw new IllegalStateException("Got here!!!!"); 
} 

ответ

0

Здравствуйте, я не думаю, что вы можете добавить отдельные МАНИФЕСТЫ, как вы ожидаете. Классы просто включены в uber-jar, а не как банки, а как пакеты.

Но если вы хотите получить версию этой конкретной библиотеки, которая является одной из зависимостей (справа?), Вы можете в конечном итоге следовать аналогичному шаблону, как ваш код выше, но вместо того, чтобы пытаться загрузить созданный META- INF/MANIFEST, вы можете найти информацию о версии включенных в список зависимостей, рядом с;)

META-INF\maven\group-id/artifact\pom.properties 

например

META-INF\maven\perseus/perseus-serverlib\pom.properties 

Дайте ему попробовать :)

Здесь вы можете найти файл с файлом вроде:

#Generated by Maven 
#Sun Aug 02 13:18:09 PDT 2015 
version=1.8.3 
groupId=org.jsoup 
artifactId=jsoup