如何使用可以在本地和 Jenkins 上工作的 Java 获取超链接的文件路径?
How to get the file path for a hyperlink using Java that can work both locally and on Jenkins?
我正在我的 Java 项目中构建一个带有超链接的 HTML 文件。
// log/file.html path is within the Jenkins workspace directory. $WORKSPACE/log/file.html.
File myFile = new File("log/file.html");
String hyperlink = myFile.getCanonicalPath();
本地 Mac 运行:
成功。
html 会生成一个超链接,单击该链接会将我带到所需的 HTML 页面。
hyperlink value = file:///Users/username/workspace/ProjectName/log/file.html
但是,当我 运行 在 Jenkins 上运行 Maven Java 项目时,它失败了。
hyperlink value = file:///Users/Shared/Jenkins/Home/workspace/JobFolderName/JobName/log/file.html
显然,这个绝对路径超链接是行不通的。单击超链接时没有任何反应。
如何更改我的 Java 代码,使其既适用于本地计算机 运行 也适用于具有工作区相对路径的 Jenkins(不考虑使用的 OS - Windows/Linux/Mac)?
使用类路径资源而不是绝对路径。
例如。假设在 src/main/resources 中,您创建了一个目录 'log' 并在其中保存了 html 文件
URL fileUrl = getClass().getResource("log/file.html");
File myFile = new File(fileUrl.getFile());
String hyperlink = myFile.getCanonicalPath();
这对我有用
String hyperlink = "";
File myFile = new File("log/file.html");
if(System.getenv("BUILD_URL") == null) {
hyperlink = myFile.getCanonicalPath();
}
else{
hyperlink = System.getenv("BUILD_URL") + "artifact" + File.separator + "log" + File.separator + "file.html";
}
我正在我的 Java 项目中构建一个带有超链接的 HTML 文件。
// log/file.html path is within the Jenkins workspace directory. $WORKSPACE/log/file.html.
File myFile = new File("log/file.html");
String hyperlink = myFile.getCanonicalPath();
本地 Mac 运行: 成功。
html 会生成一个超链接,单击该链接会将我带到所需的 HTML 页面。
hyperlink value = file:///Users/username/workspace/ProjectName/log/file.html
但是,当我 运行 在 Jenkins 上运行 Maven Java 项目时,它失败了。
hyperlink value = file:///Users/Shared/Jenkins/Home/workspace/JobFolderName/JobName/log/file.html
显然,这个绝对路径超链接是行不通的。单击超链接时没有任何反应。
如何更改我的 Java 代码,使其既适用于本地计算机 运行 也适用于具有工作区相对路径的 Jenkins(不考虑使用的 OS - Windows/Linux/Mac)?
使用类路径资源而不是绝对路径。
例如。假设在 src/main/resources 中,您创建了一个目录 'log' 并在其中保存了 html 文件
URL fileUrl = getClass().getResource("log/file.html");
File myFile = new File(fileUrl.getFile());
String hyperlink = myFile.getCanonicalPath();
这对我有用
String hyperlink = "";
File myFile = new File("log/file.html");
if(System.getenv("BUILD_URL") == null) {
hyperlink = myFile.getCanonicalPath();
}
else{
hyperlink = System.getenv("BUILD_URL") + "artifact" + File.separator + "log" + File.separator + "file.html";
}