Исполняемый файл не может найти упакованные ресурсы - PullRequest
1 голос
/ 10 марта 2019

У меня есть следующий фрагмент кода для чтения файла из ресурсов:

randomFirstName = rReader.generate(
new FileReader(classLoader.getResource("NamesFem.txt").getFile()));

Он отлично работает, когда я запускаю его из IDEA.

Мне нужно поместить проект в исполняемый jarс мавеномЭто мой pom.xml конфиг для модуля сборки:

<plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                    <configuration>
                        <archive>
                            <manifest>
                                <mainClass>com.myPackage.CreateXlsFile</mainClass>
                            </manifest>
                        </archive>
                        <descriptorRefs>
                            <descriptorRef>jar-with-dependencies</descriptorRef>
                        </descriptorRefs>
                    </configuration>
                </execution>
            </executions>
        </plugin>

Когда я пытаюсь запустить упакованную банку, я получаю следующее исключение: Exception in thread "main" java.io.FileNotFoundException: file:/Users/myUser/MyProject/target/my-project-1.0-SNAPSHOT-jar-with-dependencies.jar!/NamesFem.txt (No such file or directory)

Когда я вручную распаковываю банкуфайлы находятся в корневом каталоге jar:

enter image description here

Что не так?

1 Ответ

2 голосов
/ 10 марта 2019

Я предполагаю, что проблема в том, что метод URL.getFile не работает с содержимым файла JAR.Когда я пытался что-то явно прочитать из файла JAR, я всегда использовал ClassLoader.getResourceAsStream.Что-то вроде:

randomFirstName = rReader.generate(
    new InputStreamReader(
      classLoader.getResourceAsStream("NamesFem.txt")
    )
);

Это должно работать независимо от того, находится ли NamesFem.txt в вашем JAR-файле или в вашем classpath как отдельный файл, то есть в вашей среде IDE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...