Maven套件:.jar文件中不包含.txt

qxgroojn  于 2022-11-02  发布在  Maven
关注(0)|答案(1)|浏览(194)

我有一个抓取网页的程序。我使用JSoup和Selenium。为了在JSoup请求中配置用户代理,我有一个包含用户代理列表的userAgents.txt文件。在每次执行时,我有一个读取.txt文件并返回随机用户代理的方法。
在IntelliJ中运行时,程序按预期工作。
当我试图用mvn clean package构建.jar文件时,问题发生了。当运行.jar文件时,我得到了FileNotFoundException,因为程序找不到userAgents.txt文件。
如果我删除此功能,并 * 硬编码 * 用户代理,我没有问题。
文件当前在src/main/resources中。执行.jar时,我会收到异常:
java.io.FileNotFoundException:./src/main/resources/userAgents.txt(没有这样的文件或目录)
我尝试了maven-resources-plugin将文件复制到目标文件夹:

<plugin>
    <artifactId>maven-resources-plugin</artifactId>
    <version>3.3.0</version>
    <executions>
        <execution>
            <id>copy-resources</id>
            <phase>package</phase>
            <goals>
                <goal>copy-resources</goal>
            </goals>
            <configuration>
                <outputDirectory>${basedir}/target/extra-resources</outputDirectory>
                <includeEmptyDirs>true</includeEmptyDirs>
                <resources>
                    <resource>
                        <directory>${basedir}/src/main/resources</directory>
                        <filtering>false</filtering>
                    </resource>
                </resources>
            </configuration>
        </execution>
    </executions>
</plugin>

即使在程序中更改路径(从target/extra-resources打开文件),错误仍然存在。
我还添加了这个<resources>,但什么也没得到:

<resources>
    <resource>
        <directory>src/main/resources</directory>
        <includes>
            <include>**/*.txt</include>
            <include>**/*.csv</include>
        </includes>
    </resource>
</resources>

在程序中,我使用以下代码阅读文件:

String filePath = "./src/main/resources/userAgents.txt";
File extUserAgentLst = new File(filePath);
Scanner usrAgentReader = new Scanner(extUserAgentLst);

"所以我的问题是“

  • 如何确保userAgents.txt文件在.jar文件中,这样当我运行它时,程序从这个文件中读取,并且不返回任何异常?
ev7lccsx

ev7lccsx1#

您可以改用getResourceAsStream,如下所示:

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.stream.Collectors;

class MyClass {

  public static void main(String[] args) {
    InputStream inStream = MyClass.class.getClassLoader().getResourceAsStream("userAgents.txt");
    if (inStream != null) {
      BufferedReader reader = new BufferedReader(new InputStreamReader(inStream));
      String usersTxt = reader.lines().collect(Collectors.joining());
      System.out.println(usersTxt);
    }
  }
}

不需要在pom.xml文件中指定标记<resources>,只需要在运行mvn package命令构建项目之前将文件放在src/main/resources中即可。

相关问题