在Maven中获取目标目录路径(Java)

3phpmpom  于 2023-10-17  发布在  Maven
关注(0)|答案(6)|浏览(185)

在Maven项目中,我想将一些测试结果写入项目目标目录中的文件中。每当我获取项目目录时,它实际上获取的是IntelliJ项目目录,而不是实际的Maven目录。

5sxhfpxr

5sxhfpxr1#

也可以使用java.nio.file.Paths

URL url = Paths.get("target", "results.csv").toUri().toURL();
dsf9zpds

dsf9zpds2#

我有办法了。这就是我如何实施的。我有自己的类CSVReader,它使用CSVReader库。我正在目标目录下的results.csv文件中写入结果。

URL location = CSVReader.class.getProtectionDomain().getCodeSource().getLocation();
String path = location.getFile().replace("classes/","") + "results.csv";

在上面的代码中,我获取了目标目录路径,删除了classes/ by string replace方法,并附加了我想要的文件名。希望这可能会帮助某人。

332nm8kg

332nm8kg3#

我使用了上面的答案,并进行了轻微的修改(我不能添加评论)。由于测试放在“test”文件夹中,它们的类将驻留在“target/test-classes”中(因此替换“classes”可能不会给予预期的结果)。相反,我使用了以下内容:

File targetClassesDir = new File(ExportDataTest.class.getProtectionDomain().getCodeSource().getLocation().getPath());
File targetDir = targetClassesDir.getParentFile();
yc0p9oo0

yc0p9oo04#

我使用classloaders根资源路径来检索项目构建目录,下面是单行:

Path targetPath = Paths.get(getClass().getResource("/").toURI()).getParent();

根资源路径指向test-classes,它的父路径是所需的路径,无论是通过maven surefire还是通过IDE的JUnit运行器(如Eclipse)运行测试。

agyaoht7

agyaoht75#

以下解决方案适用于我:

URL location = YourClass.class.getProtectionDomain().getCodeSource().getLocation();
String path = location.getFile().replace("/test-classes/","").replace("/classes/","");

Path targetPath = Paths.get(getClass().getResource("/").toURI()).getParent();
String path = targetPath.toString();
n3h0vuf2

n3h0vuf26#

您需要获取类的位置,在那里运行逻辑以获取目标路径的位置。我使用下面的代码来实现这一点:

URL target = this.getClass().getClassLoader().getResource("org/mycomp/home/model").toURI().toURL();

相关问题