Исключение в основном потоке java.lang.UnsatisfiedLinkError: невозможно загрузить библиотеку TableauExtract: указанный модуль не может быть найден

import com.tableausoftware.TableauException;
import com.tableausoftware.common.Type;
import com.tableausoftware.extract.Extract;
import com.tableausoftware.extract.Row;
import com.tableausoftware.extract.Table;
import com.tableausoftware.extract.TableDefinition;    
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class TestTableau {

    public static void main(String[] args) throws IOException {
        //delete existing extract file
        String extractFile = "extract.tde";
        deleteFile(extractFile);

        try (Extract extract = new Extract(extractFile)) {
            //create table definition
            TableDefinition tableDef = new TableDefinition();
            int columnCount = 100;
            for (int i = 0; i < columnCount; i++) {
                tableDef.addColumn(Integer.toString(i), Type.UNICODE_STRING);
            }

            //create a table
            Table table = extract.addTable("Extract", tableDef);

            //create a sample document
            //reuse the document for each row to minimize the non-tableau CPU and memory consumption
            Random random = new Random();
            List<String> rowData = new ArrayList<>();
            for (int i = 0; i < columnCount; i++) {
                rowData.add(Integer.toString(random.nextInt()));
            }

            long startTime = System.nanoTime();
            System.out.println("Populating table...");

            //populate the table
            int tableRows = 4000000;
            for (int i = 0; i < tableRows; i++) {
                //convert input document to tableau row
                Row row = new Row(tableDef);
                for (int j = 0; j < rowData.size(); j++) {
                    row.setString(j, rowData.get(j));
                }

                //add the row to the table
                table.insert(row);
            }

            long endTime = System.nanoTime();
            System.out.println(String.format("Total time (ms): %s", (endTime - startTime) /
                    1000000));

        } catch (TableauException e) {
            e.printStackTrace();
        }
    }

    private static void deleteFile(String file) {
        File extractFile = new File(file);
        if (extractFile.exists()) {
            extractFile.delete();
        }
    }
}

когда я запускаю код, я получаю исключение:

Исключение в потоке «main» java.lang.UnsatisfiedLinkError: невозможно загрузить библиотеку TableauExtract: указанный модуль не может быть найден.

на com.sun.jna.NativeLibrary.loadLibrary (NativeLibrary.java:194) на com.sun.jna.NativeLibrary.getInstance (NativeLibrary.java:283) на com.sun.jna.NativeLibrary.getInstance (NativeLibrary.java:244 ) в com.sun.jna.Native.register (Native.java:1065) в com.tableausoftware.extract.Extract. (Неизвестный источник) в TestTableau.main (TestTableau.java:21)

Я добавил следующие файлы jar в путь сборки:

tableauextract.jar jna.jar tableaucommon.jar

Как решить эту проблему?


person slssv    schedule 13.07.2017    source источник


Ответы (2)


Если у вас есть библиотеки в вашем пути сборки, вы пытались очистить и построить свой проект снова?

person Ivan Lynch    schedule 13.07.2017
comment
Нет, я больше не строил - person slssv; 13.07.2017
comment
Если вы работаете с: Eclipse - перейдите в «Проект» и нажмите «Очистить», а затем выберите свой проект. Netbeans - щелкните правой кнопкой мыши свой проект, щелкните "Очистить" и создайте Intellij - так же, как netbeans - person Ivan Lynch; 13.07.2017
comment
такое же исключение и в intellij. Я построил проект, и когда я запускаю, все равно возникает исключение - person slssv; 14.07.2017

UnsatisfiedLinkError означает, что вы используете файл jar, который зависит от собственных библиотек, присутствующих в вашей системе, в месте, о котором знает Java. Из вашей трассировки стека я предполагаю, что вам понадобится TableauExtract.dll (и, возможно, другие). Необходимые библиотеки доступны на сайте Tableau здесь:

Tableau SDK

После их установки вам нужно указать Java, как найти каталог, в котором находятся файлы библиотеки. Этот метод зависит от вашей ОС, но в Unix вы можете сделать это, включив каталог в переменную среды LD_LIBRARY_PATH, или, возможно, используя флаг -Djava.library.path =

person Edgar Ngwenya    schedule 25.01.2018