Как настроить root для временных каталогов в Java - PullRequest
0 голосов
/ 25 мая 2018

Мы запускаем код, который соответствует стандарту для создания временного каталога:

import java.nio.file.Files;

И затем:

tmp = Files.createTempDirectory("ourprefix-");

Это эффективно создает каталоги в /tmp/, так чтомы получаем такие вещи, как /tmp/ourprefix-1234 или аналогичные.

К сожалению, этот базовый каталог /tmp/, кажется, исправлен, и, поскольку на нашем сервере сборки многие вещи, как правило, помещают свои временные файлы туда, и потому что раздел /tmp / is on довольно мала, это проблема.

Есть ли способ настроить это средство извне (т.е. без изменения кода)?Я бы предположил, что /tmp/ является значением по умолчанию и может быть переопределено путем установки специальной переменной среды или (более Javaish) передачи специального свойства компилятору (например, -Djava.tmp.root=/path/to/my/larger/partition/tmp).

Я пытался использовать java.io.tmpdir но установка этого не имела никакого эффекта;кажется, что это значение по умолчанию, если createTempDirectory() ничего не дано, но в нашем случае код передает префикс.

Есть идеи, как добиться того, чего я хочу, без изменения исходного кода?

EDIT

После некоторого исследования я обнаружил, что это работает очень хорошо:

import java.nio.file.Path;
import java.nio.file.Files;
import java.io.IOException;

public class TestTempDir {
    public static void main(String[] args) throws IOException {
        System.out.println(System.getProperty("java.io.tmpdir"));
        Path path = Files.createTempDirectory("myprefix-");
        System.out.println(path.toFile().getAbsolutePath());
    }
}

Скомпилируйте с javac TestTempDir.java, подготовьте с mkdir tmp и запустите с java -Djava.io.tmpdir= pwd /tmp TestTempDir thisпросто работает, как и ожидалось:

/my/work/path/tmp
/my/work/path/tmp/myprefix-1525078348397347983

Моя проблема, скорее всего, связана с Jenkins и его плагином Maven, который не передает заданные свойства в тестовые случаи: - /

1 Ответ

0 голосов
/ 25 мая 2018

если вы передаете свойство java.io.tmpdir в качестве пользовательского свойства JVM при запуске JVM, оно должно работать.
Что-то вроде этого:

java -Djava.io.tmpdir=myPath myClass

Я протестировал, и оно работает:

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;

public class TestTempDir {

    public static void main(String[] args) throws IOException {
        System.out.println(System.getProperty("java.io.tmpdir"));
        Path dir = Files.createTempDirectory("helloDir");
        System.out.println(dir.toString());
    }
}

$ java -Djava.io.tmpdir = D: \ temp TestTempDir

D: \ temp

D: \ temp \ helloDir5660384505531934395

...