Чайник компилирует Jar с зависимостями - PullRequest
0 голосов
/ 12 ноября 2018

Pentaho / Kettle: вместо того, чтобы запускать код из поля кода в «Пользовательском классе Java», я пытаюсь скомпилировать его в Jar-файл и запустить файл jar из «Пользовательского класса Java». Я делаю это потому, что мои Java-проекты слишком велики, чтобы увеличить модульность. Тем не менее, есть некоторые проблемы с зависимостями. Некоторые методы недоступны в библиотеках, а некоторые доступны в нескольких библиотеках.

Zip-файл проекта, который я пытаюсь скомпилировать: https://drive.google.com/file/d/1H-RGGvH-h3zvLnF3qIVVIHnnB4vtwKvN/view?usp=sharing.

Код используемых Gradle-зависимостей:

dependencies {
compile group: 'com.datastax.cassandra', name: 'cassandra-driver-core', 
version: '3.1.2'

compile group: 'pentaho-kettle', name: 'kettle-core', version: '7.0.0.3-62'
compile group: 'pentaho-kettle', name: 'kettle-sdk-database-plugin', version: '7.0.0.0-25'
compile group: 'pentaho-kettle', name: 'kettle-sdk-step-plugin', version: '7.0.0.0-25'
compile group: 'pentaho-kettle', name: 'kettle-ui-swt', version: '7.0.0.3-62'

compile group: 'org.projectlombok', name: 'lombok', version: '1.16.16'

testCompile group: 'junit', name: 'junit', version: '4.11'
}

полный код

import java.util.regex.Pattern;


import be.ibridge.kettle.core.exception.KettleException;
import be.ibridge.kettle.trans.step.StepDataInterface;
import be.ibridge.kettle.trans.step.StepMetaInterface;
import be.ibridge.kettle.core.*;

/**
 * @author Michiel
 */


public class JavaExampleCheckRegex {

private Pattern p = null;
private FieldHelper fieldToTest = null;
private FieldHelper outputField = null;

public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) 
throws KettleException
{
    Object[] r = getRow();

    if (r == null) {
        setOutputDone();
        return false;
    }

    // prepare regex and field helpers
    if (first){
        first = false;

        String regexString = getParameter("regex");
        p = Pattern.compile(regexString);

        fieldToTest = get(Fields.In, getParameter("test_field"));
        outputField = get(Fields.Out, "result");
    }

    r = createOutputRow(r, data.outputRowMeta.size());

    // Get the value from an input field
    String test_value = fieldToTest.getString(r);

    // test for match and write result
    if (p.matcher(test_value).matches()){
        outputField.setValue(r, Long.valueOf(1));
    }
    else{
        outputField.setValue(r, Long.valueOf(0));
    }

    // Send the row on to the next step.
    putRow(data.outputRowMeta, r);

    return true;
    }

}

Снимок экрана некоторых методов, которые он не может обнаружить (красным): Undetected methods

Снимок экрана некоторых методов, доступных в нескольких библиотеках: Methods available in multiple libraries

EDIT: ручное добавление ВСЕХ Jar-файлов из \ data -gration \ lib \ также не работает.

1 Ответ

0 голосов
/ 12 ноября 2018

Импортировали ли вы методы красным цветом?

Не потому, что файл находится в пути к классам, класс знает, что ему нужно импортировать их.

Это также исправит вашу множественную библиотекупроблема, поскольку при импорте указывается полный путь.

import be.ibridge.kettle.core.exception.KettleException;
...

public class JavaExampleCheckRegex{
...
} 
...