2016-01-08 24 views
9

Standardowy sposób - użycie maven-jar-plugin - generuje plik manifestu tylko podczas fazy pakietu i bezpośrednio do pliku jar.Jak wygenerować plik MANIFEST.MF podczas fazy kompilacji

Potrzebuję wygenerować manifest podczas fazy kompilacji i być dostępny w <target>/classes/META-INF.

Moim celem jest możliwość odczytania tego pliku manifestu w projekcie uruchomionym w trybie debugowania w IntelliJ Idea. (Pomysł rozwiązuje zależność słoja w projekcie od <target>/classes zamiast od <target>/*.jar - w celu zamiany na gorąco).

Jedyne rozwiązanie, jakie znam, to faktyczne utworzenie własnego MANIFEST.MF w src/main/java/resources/META-INF i pozostawienie go filtrowanego + kopiowanego podczas fazy zasobów. Ale chcę uniknąć tego rozwiązania, chcę, aby manifest został wygenerowany w standardowy sposób przy użyciu konfiguracji <archive> w pliku pom.

+0

Nie sądzę, że istnieje wtyczka do tego bezpośrednio. Zmyślnym sposobem byłoby powiązanie wykonania 'maven-jar-plugin' w celu kompilacji, rozpakowanie słoika i skopiowanie MANIFESTU ... Bardziej bezpośrednim rozwiązaniem byłoby stworzenie niestandardowej wtyczki za pomocą Maven Archiver. – Tunaki

+0

Witaj Petr, znalazłeś rozwiązanie tego problemu? – fmilani

+0

@fmilani to jest stare pytanie i zapomniałem o tym :) Czy próbowałeś odpowiedzi @ frekele poniżej? Jeśli to nie zadziała, mógłbym wysłać propozycję/żądanie push do 'maven-jar-plugin' na github, jeśli projekt jest dostępny i właściciel repozytorium jest aktywny. Lub utwórz niestandardową wtyczkę, jak sugeruje @Tunaki. –

Odpowiedz

1

Możesz to zrobić za pomocą wtyczki do pakowania maven-bundle.

<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> 
Powiązane problemy