2016-01-08 3 views
9

Стандартный способ - с использованием maven-jar-plugin - создает файл манифеста только во время фазы пакета и непосредственно в файл jar.Как сгенерировать файл MANIFEST.MF во время фазы компиляции

Мне нужно создать манифест во время фазы компиляции и быть доступным в <target>/classes/META-INF.

Моя цель - прочесть этот файл манифеста в проекте, запущенном в режиме отладки в IntelliJ Idea. (Идея разрешает зависящие от проекта jar зависимости от <target>/classes вместо <target>/*.jar - для целей горячей замены).

Единственное, что я знаю до сих пор, это создать собственный MANIFEST.MF в src/main/java/resources/META-INF и позволить ему фильтровать + копировать во время фазы ресурсов. Но я хочу избежать этого решения, я хочу, чтобы манифест генерировался стандартным способом с использованием конфигурации <archive> в файле pom.

+0

Я не думаю, что есть плагин, чтобы сделать это напрямую. Надуманным способом было бы связать выполнение 'maven-jar-plugin' для компиляции, распаковать банку и скопировать MANIFEST ... Более прямым решением было бы создать пользовательский плагин с использованием Maven Archiver. – Tunaki

+0

Привет, Петр, вы нашли решение для этого? – fmilani

+0

@fmilani это своего рода старый вопрос, и я забыл об этом :) Вы попробовали ответить @ frekele ниже? Если это не сработает, я мог бы сделать запрос/push запрос на 'maven-jar-plugin' на github, если проект существует, и владелец репо является активным. Или сделайте собственный плагин, как предлагает @Tunaki. –

ответ

1

Вы можете сделать это с помощью maven-bundle-plugin.

<plugin> 
     <groupId>org.apache.felix</groupId> 
     <artifactId>maven-bundle-plugin</artifactId> 
     <version>3.3.0</version> 
     <executions> 
      <execution> 
       <id>bundle-manifest</id> 
       <phase>process-classes</phase> 
       <goals> 
        <goal>manifest</goal> 
       </goals> 
      </execution> 
     </executions> 
     <configuration> 
      <archive> 
       <index>true</index> 
       <manifest> 
        <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries> 
        <addDefaultImplementationEntries>true</addDefaultImplementationEntries> 
       </manifest> 
       <manifestEntries> 
        <Implementation-URL>${project.url}</Implementation-URL> 
        <Java-Version>${java.version}</Java-Version> 
        <Java-Vendor>${java.vendor}</Java-Vendor> 
        <Os-Name>${os.name}</Os-Name> 
        <Os-Arch>${os.arch}</Os-Arch> 
        <Os-Version>${os.version}</Os-Version> 
        <Scm-Url>${project.scm.url}</Scm-Url> 
        <Scm-Connection>${project.scm.connection}</Scm-Connection> 
       </manifestEntries> 
      </archive> 
     </configuration> 
    </plugin>