Hey Leute,
ich habe nach etwas längerer Java-Abstinenz und mit viel ABAP + JavaScript wieder eine Aufgabe im Java-Umfeld bekommen. Ich habe mit Java 8 aufgehört und mit Java 9 kam ja so einiges neues… Im Zuge meiner Aufgabe muss ich u.a. eine Java Anwendung mit SAP programmieren, die Speech-To-Text mit der Google Cloud benutzt.
Da ich mich erstmal wieder einprogrammieren wollte, wollte ich Schritt für Schritt das erstmal austesten mit Java 11. Das standardmässige Hello World ging wie immer problemlos. Beim Abarbeiten des Google-Tutorials bekomm ich aber wieder die Krise mit den neuen Modulen. Ewiges rumprobiere und gegoogle half mir zwar etwas weiter beim Verstehen, WARUM die Fehler kommen, aber nicht WIE ich sie löse.
Also aktueller Stand:
Klasse:
package test;
//Imports the Google Cloud client library
import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.Dataset;
import com.google.cloud.bigquery.DatasetInfo;
public class Test {
public static void main(String... args) throws Exception {
// Instantiate a client. If you don't specify credentials when constructing a client, the
// client library will look for credentials in the environment, such as the
// GOOGLE_APPLICATION_CREDENTIALS environment variable.
BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();
// The name for the new dataset
String datasetName = "my_new_dataset";
// Prepares a new dataset
Dataset dataset = null;
DatasetInfo datasetInfo = DatasetInfo.newBuilder(datasetName).build();
// Creates the dataset
dataset = bigquery.create(datasetInfo);
com.google.cloud.bigquery.BigQuery b;
System.out.printf("Dataset %s created.%n", dataset.getDatasetId().getDataset());
}
}
Module-Info:
module test {
requires java.xml;
requires java.base;
requires google.cloud.bigquery;
}
Wenn ich das so starten will, bekomm ich nur:
Error occurred during initialization of boot layer
java.lang.module.ResolutionException: Modules jsr305 and java.annotation export package javax.annotation to module com.google.api.client
Die Lib von Google is im Module-Path. Laut SO ist das Problem, das beide genannten Module ein Package exportieren, es mit den Modulen aber nicht erlaubt ist. Das kann bei älteren LIBs durchaus vorkommen, daher solle man sie im Class-Path benutzen.
Zusätzlich bekomme ich in der Module-Info noch die Warnung:
Name of automatic module ‚google.cloud.bigquery‘ is unstable, it is
derived from the module’s file name.
Bisher auch keine Lösung dafür.
Also löschen aus der Module-Info und ab in den Class-Path. Dann bekomm ich überall in der Klasse aber nur „Type not accessible“… Das Paket „com.google.cloud.bigquery“ findet er, danach is aber Schluss.
Ich blick da noch nich so wirklich durch… Kann mich nich erinnern in Java8 jemals so viele Probleme beim einfach einbinden einer Lib gehabt zu haben.