gpt4 book ai didi

java - 是否有 Ant 任务来检查符号链接(symbolic link)是否悬空?

转载 作者:行者123 更新时间:2023-12-01 13:33:34 30 4
gpt4 key购买 nike

我的构建系统中有一些符号链接(symbolic link)指向我需要构建的 jar(如果 jar 不存在)。即如果符号链接(symbolic link)悬空。是否有 Ant 任务或解决方法来检查这一点?

至于为什么我不能在这些 jar 中包含适当的 Ant 依赖项,原因是它们的构建过程很长,涉及从 ftp 存储库进行即时 Internet 下载,这需要太长时间并且超出我的控制范围.

最佳答案

好吧,最后我实现了一个自定义的 Ant 任务(代码在最后),可以像这样从 Ant 中使用它:

<file-pronouncer filePath="path/to/file" retProperty="prop-holding-type-of-that-file"/>

然后可以使用以下方式读取:

<echo message="the file-pronouncer task for file 'path/to/file' returned: ${prop-holding-type-of-that-file}"/>

可能出现以下结果:

 [echo] the file-pronouncer task for file 'a' returned: regular-file
[echo] the file-pronouncer task for file 'b' returned: symlink-ok
[echo] the file-pronouncer task for file 'c' returned: symlink-dangling
[echo] the file-pronouncer task for file 'd' returned: not-exists

FilePronouncer 自定义 Ant 任务的代码

import java.io.IOException;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.Task;
import java.nio.file.Path;
import java.nio.file.Files;
import java.nio.file.FileSystems;
import java.nio.file.LinkOption;
import java.nio.file.attribute.BasicFileAttributes;
import org.apache.tools.ant.BuildException;

public class FilePronouncer extends Task {

private String filePath = null;
private String retProperty = null;

public String getFilePath() {
return filePath;
}

public void setFilePath(String filePath) {
this.filePath = filePath;
}

public String getRetProperty() {
return retProperty;
}

public void setRetProperty(String property) {
this.retProperty = property;
}

public void execute() {
try {
Path path = FileSystems.getDefault().getPath(filePath);
boolean fileExists = Files.exists(path, LinkOption.NOFOLLOW_LINKS);
Boolean isSymlink = null;
Boolean filePointedToExists = null;
if (fileExists) {
BasicFileAttributes attrs = Files.readAttributes(path, BasicFileAttributes.class, LinkOption.NOFOLLOW_LINKS);
isSymlink = attrs.isSymbolicLink();
if (isSymlink)
filePointedToExists = Files.exists(path);
}
Project project = getProject();
String rv = null;
if (!fileExists)
rv = "not-exists";
else {
if (!isSymlink)
rv = "regular-file";
else {
if (filePointedToExists)
rv = "symlink-ok";
else
rv = "symlink-dangling";
}
}
project.setProperty(retProperty, rv);
} catch (IOException e) {
throw new BuildException(e);
}
}
}

关于java - 是否有 Ant 任务来检查符号链接(symbolic link)是否悬空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21416091/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com