据我所知,当我们在talend中创建项目时,它会创建三个文件,即project_name.item,project_name.properties和project_name.java。当我们向项目添加组件时,该组件的参数取自component_java.xml文件。当我们为该组件指定参数值并保存作业时,它将自动添加到项目文件中。例如,tMap组件的典型_java.xml文件如下所示。
<COMPONENT>
<HEADER PLATEFORM="ALL"
SERIAL=""
VERSION="2.1"
STATUS="ALPHA"
COMPATIBILITY="WIN32"
AUTHOR="Talend"
RELEASE_DATE="20070703A"
STARTABLE="false"
EXTENSION="org.talend.designer.mapper"
SCHEMA_AUTO_PROPAGATE="false"
DATA_AUTO_PROPAGATE="false"
HAS_CONDITIONAL_OUTPUTS="true"
PARTITIONING="AUTO"
>
<SIGNATURE></SIGNATURE>
</HEADER>
<FAMILIES>
<FAMILY>Processing</FAMILY>
</FAMILIES>
<DOCUMENTATION>
<URL/>
</DOCUMENTATION>
<CONNECTORS>
<CONNECTOR BUILTIN="true" CTYPE="FLOW" MIN_INPUT="1" MIN_OUTPUT="1"/>
<CONNECTOR CTYPE="LOOKUP" COMPONENT="tAdvancedHash"/>
<CONNECTOR CTYPE="ITERATE" MAX_OUTPUT="0" MAX_INPUT="0"/>
<CONNECTOR CTYPE="SUBJOB_OK" MAX_INPUT="0"/>
<CONNECTOR CTYPE="SUBJOB_ERROR" MAX_INPUT="0"/>
<CONNECTOR CTYPE="COMPONENT_OK" MAX_OUTPUT="0"/>
<CONNECTOR CTYPE="COMPONENT_ERROR" MAX_OUTPUT="0"/>
<CONNECTOR CTYPE="RUN_IF" MAX_OUTPUT="0"/>
</CONNECTORS>
<PARAMETERS>
<PARAMETER NAME="MAP" FIELD="EXTERNAL" NUM_ROW="1">
<DEFAULT/>
</PARAMETER>
<PARAMETER
NAME="LINK_STYLE"
FIELD="CLOSED_LIST"
NUM_ROW="1"
>
<ITEMS DEFAULT="">
<ITEM NAME="AUTO" VALUE="AUTO" />
<ITEM NAME="BEZIER_CURVE" VALUE="BEZIER_CURVE" />
<ITEM NAME="LINE" VALUE="LINE" />
</ITEMS>
</PARAMETER>
<PARAMETER NAME="TEMPORARY_DATA_DIRECTORY" FIELD="DIRECTORY"
NUM_ROW="2" GROUP="STORE_ON_DISK"
>
<!--<DEFAULT>"__COMP_DEFAULT_FILE_DIR__/temp"</DEFAULT>
--></PARAMETER>
<PARAMETER NAME="PREVIEW" FIELD="IMAGE" SHOW="true" NUM_ROW="4">
<DEFAULT/>
</PARAMETER>
<PARAMETER
NAME="DIE_ON_ERROR"
FIELD="CHECK"
NUM_ROW="100"
SHOW="false"
>
<DEFAULT>true</DEFAULT>
</PARAMETER>
<PARAMETER
NAME="LKUP_PARALLELIZE"
FIELD="CHECK"
NUM_ROW="100"
SHOW="false"
>
<DEFAULT>false</DEFAULT>
</PARAMETER>
</PARAMETERS>
<ADVANCED_PARAMETERS>
<PARAMETER NAME="ROWS_BUFFER_SIZE" FIELD="TEXT"
REQUIRED="true" NUM_ROW="1" SHOW="true" GROUP="STORE_ON_DISK"
>
<DEFAULT>2000000</DEFAULT>
</PARAMETER>
<PARAMETER
NAME="CHANGE_HASH_AND_EQUALS_FOR_BIGDECIMAL"
FIELD="CHECK"
NUM_ROW="10"
>
<DEFAULT>false</DEFAULT>
</PARAMETER>
</ADVANCED_PARAMETERS>
<CODEGENERATION>
<TEMPLATES INPUT="TMAP_OUT" OUTPUT="TMAP_IN">
<TEMPLATE NAME="TMAP_OUT" COMPONENT="tMapOut">
<LINK_TO NAME="TMAP_IN" CTYPE="ROWS_END"/>
</TEMPLATE>
<TEMPLATE NAME="TMAP_IN" COMPONENT="tMapIn"/>
</TEMPLATES>
</CODEGENERATION>
<RETURNS/>
<PLUGINDEPENDENCIES>
<PLUGINDEPENDENCY ID="org.talend.designer.abstractmap" />
</PLUGINDEPENDENCIES>
</COMPONENT>
project_name.item文件看起来像这样(我只显示组件部分)
<node componentName="tMap" componentVersion="2.1" offsetLabelX="0" offsetLabelY="0" posX="352" posY="64">
<elementParameter field="TEXT" name="UNIQUE_NAME" value="tMap_1"/>
<elementParameter field="EXTERNAL" name="MAP" value=""/>
<elementParameter field="CLOSED_LIST" name="LINK_STYLE" value="AUTO"/>
<elementParameter field="DIRECTORY" name="TEMPORARY_DATA_DIRECTORY" value=""/>
<elementParameter field="IMAGE" name="PREVIEW" value="_xpwnoHOoEeSkDJ1bbi1FTg-tMap_1-PREVIEW.bmp"/>
<elementParameter field="CHECK" name="DIE_ON_ERROR" value="true"/>
<elementParameter field="CHECK" name="LKUP_PARALLELIZE" value="false"/>
<elementParameter field="TEXT" name="ROWS_BUFFER_SIZE" value="2000000"/>
<elementParameter field="CHECK" name="CHANGE_HASH_AND_EQUALS_FOR_BIGDECIMAL" value="false"/>
<elementParameter field="TEXT" name="CONNECTION_FORMAT" value="row"/>
<elementParameter field="CHECK" name="INFORMATION" value="false"/>
<elementParameter field="MEMO" name="COMMENT" value=""/>
<elementParameter field="CHECK" name="VALIDATION_RULES" value="false"/>
<metadata connector="FLOW" label="out1" name="out1">
<column comment="" key="false" name="newColumn_1" nullable="true" originalDbColumnName="newColumn" pattern="" sourceType="" type="id_String" usefulColumn="true"/>
<column comment="" key="false" name="newColumn" nullable="true" pattern="" sourceType="" type="id_String" usefulColumn="true"/>
</metadata>
<nodeData xsi:type="MapperData">
<uiProperties shellMaximized="true"/>
<varTables sizeState="INTERMEDIATE" name="Var"/>
<outputTables sizeState="INTERMEDIATE" name="out1">
<mapperTableEntries name="newColumn_1" expression="row1.newColumn " type="id_String" nullable="true"/>
<mapperTableEntries name="newColumn" expression="row1.newColumn1 " type="id_String" nullable="true"/>
</outputTables>
<inputTables sizeState="INTERMEDIATE" name="row1" matchingMode="UNIQUE_MATCH" lookupMode="LOAD_ONCE">
<mapperTableEntries name="newColumn" type="id_String" nullable="true"/>
<mapperTableEntries name="newColumn1" type="id_String" nullable="true"/>
</inputTables>
</nodeData>
</node>
如果我们清楚地看到.item文件中的所有参数都取自tMap_java.xml文件,除了在运行时生成的元数据,nodedata(因此是inputTables,outputTables等)。我需要知道的是talend如何生成此部分并在运行时在.item文件中填充相同内容?实际上,我需要知道如何在任何组件的.item文件中生成元数据。我的要求是我想使用组件的_java.xml文件生成.item文件。我只是通过查看组件的_java.xml文件,无法在.item文件中生成元数据部分。
答案 0 :(得分:4)
TOS项目(存储库,元数据,项目......)仅用于设计作业(即图形gui和向导),而不是用于执行它们。
执行或导出作业时,会执行参数化的javajet文件的反弹。 Javajet代码输出常规的.java文件,其中组件参数已经解析。这个.java代码依次编译并打包在.jar文件中,然后执行该文件。
换句话说,javajet端的所有内容都不能在运行时设置,而只能在编译时设置。
此外,您不能将参数* _java.xml用于低级别设置项目属性,因为这是代码生成器将参数提供给javajet的元数据架构。它是组件的属性文件,而不是作业本身。