Пакет Maven открывает файл (как * File *) внутри пакета jar - PullRequest
2 голосов
/ 26 ноября 2010

Мне нужно открыть файл, который находится в пакете maven jar.Это конфигурация модели для фреймворка, который я использую, и конструктор класса библиотеки должен передавать объект типа File .Я могу получить путь к файлу конфигурации, используя загрузчик классов без каких-либо проблем.Но - к сожалению - File не может прочитать файл внутри jar.Поэтому я получаю java.io.FileNotFoundException .Сейчас я ищу решение этой проблемы.Мой план - распаковать файл конфигурации модели и поместить его во временный каталог.Однако, прежде чем начать кодирование, я хотел бы узнать, есть ли какое-либо другое решение для такой проблемы, как у меня.

ОБНОВЛЕНИЕ: мне нужно прочитать файл во время выполнения.

Ответы [ 2 ]

4 голосов
/ 26 ноября 2010

Если вы делаете это из сборки maven, распакуйте ресурс jar в файл, используя

  • dependency:unpack-dependencies (если банка является одной из maven зависимостей проекта)

    <plugin>
     <groupId>org.apache.maven.plugins</groupId>
     <artifactId>maven-dependency-plugin</artifactId>
     <executions>
       <execution>
        <id>unpack-dependencies</id>
        <phase>generate-resources</phase>
        <goals>
          <goal>unpack-dependencies</goal>
        </goals>
        <configuration>
          <includeGroupIds>the.groupId</includeGroupIds>
          <includeArtifactIds>the.artifactId</includeArtifactIds>
          <includes>**/path/to/your/resource.txt</includes>
          <outputDirectory>where/do/you/want/it</outputDirectory>
        </configuration>
      </execution>
     </executions>
    </plugin>
    

или используйте

  • dependency:unpack (если банка не зависит, но все еще доступна как артефакт maven)

    <plugin>
     <groupId>org.apache.maven.plugins</groupId>
     <artifactId>maven-dependency-plugin</artifactId>
     <executions>
       <execution>
         <id>unpack</id>
         <phase>generate-resources</phase>
         <goals>
           <goal>unpack</goal>
         </goals>
         <configuration>
           <artifactItems>
             <artifactItem>
               <groupId>the.groupid</groupId>
               <artifactId>the.artifactid</artifactId>
               <version>the.version</version>
               <type>jar</type>
               <outputDirectory>where/do/you/want/it</outputDirectory>
               <includes>**/path/to/your/resource.txt</includes>
             </artifactItem>
           </artifactItems>
         </configuration>
       </execution>
     </executions>
    </plugin>
    
3 голосов
/ 20 декабря 2010

Я думаю, вам следует использовать JarInputStream , обходя записи JAR одну за другой, пока не найдете то, что вам нужно. Тогда просто read() содержание найденного JarEntry.

...