bugfix> java > 投稿

一時ディレクトリを作成するための標準を実行するコードを実行します。

import java.nio.file.Files;

その後:

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

これにより、事実上、 /tmp/ の下にディレクトリが作成されます。 /tmp/ourprefix-1234 のようなものが得られるようにまたは類似。

残念ながら、このベースディレクトリは /tmp/ 修正されたようです。ビルドサーバーでは、多くのものがそこに一時的なものを配置する傾向があり、/ tmp /のパーティションがかなり小さいため、これは問題です。

この機能を外部から設定する方法はありますか(つまり、コードを変更せずに)?私はその /tmp/ を推測していただろうはデフォルトであり、特別な環境変数を設定するか(よりJavaらしい)コンパイラに特別なプロパティを渡すことでオーバーライドできます(例: -Djava.tmp.root=/path/to/my/larger/partition/tmp )。

java.io.tmpdir を使ってみたしかし、これを設定しても効果はありませんでした。 createTempDirectory() に何も与えられない場合のデフォルトのようですしかし、この場合、コードはプレフィックスを渡します。

ソースコードを変更せずに私が望むものを達成する方法はありますか?

編集

いくつかの調査の後、私はこれがうまくいくことを発見しました:

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 これは期待どおりに機能します

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

私の問題はむしろ、JenkinsとそのMavenプラグインの問題で、テストケースに設定されたプロパティを渡さないようです:-/

回答 1 件
  • 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

あなたの答え