Как я знаю, когда мы создаем проект в talend, он создает три файла: project_name.item, project_name.properties и project_name.java. Когда мы добавляем компонент в проект, параметры для этого компонента берутся из файла component_java.xml. Когда мы укажем значения параметров для этого компонента и сохраним задание, он будет автоматически добавлен в файл элемента. Например, типичный файл _java.xml для компонента tMap выглядит следующим образом.
<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 файле для любого компонента. Мое требование - я хочу сгенерировать файл.item из файла _java.xml компонента. Я не могу генерировать часть метаданных в.item файле, просто просматривая файл _java.xml компонента.
Проекты TOS (репозиторий, метаданные, элементы...) используются только для проектирования заданий (например, графических gui и wizards), а не для их выполнения.
Когда задание выполняется или экспортируется, выполняется откат параметризованных файлов javajet. Код Javajet выводит регулярные.java файлы, где параметры компонента уже разрешены. Этот код.java, в свою очередь, скомпилирован и упакован в файл.jar, который в свою очередь выполняется.
Другими словами, все, сидящие на стороне javajet, не могут быть установлены во время выполнения, но только во время компиляции.
Кроме того, вы не можете использовать параметр * _java.xml для низкоуровневых параметров проекта, так как это схема метаданных для когенератора для подачи параметров в javajet. Это файл свойств для компонента, а не сама работа.