如果我理解正确,您不想在作业文件(workflow.xml 或 job.properties)中硬编码 jar 文件的名称,而是寻找一种在运行时确定 jar 名称的方法。这样,可以在同一作业的 2 次连续运行之间更改 jar,而无需更新任何作业文件。
如果我的理解是正确的,您可以有一个“计算”jar 名称的 java 操作。这种计算可以是多种多样的:预定义 HDFS 文件夹中是否存在 jar、预定义 HDFS 文件夹中的最新 jar、HDFS 中预定义文件中写入的 jar 名称等。
在这种情况下:
1. 在 java类你“保存” jar 名称:
Properties props = new Properties();
props.setProperty("jarFileName", jarName);
OutputStream os = new FileOutputStream(new File(System.getProperty("oozie.action.output.properties")));
props.store(os, "");
os.close();
2. 在 workflow.xml 中,您指定 java 类产生属性(<capture-output/> 标签):
<action name="init-jar-name">
<java>
<!-- Configurations -->
<main-class>com.example.JarNameFinder</main-class>
<capture-output /> <!-- Important for retrieving the properties set in the java class -->
</java>
<ok to="nextNodeName" />
<error to="errorNodeName" />
</action>
3. 在 workflow.xml 中,在需要 jar 文件名的地方,您可以这样指定:
${wf:actionData('init-jar-name')['jarFileName']}