IntelliJ: importiertes Package wird nicht gefunden?
Hallo,
ich habe ein kleines Test-Projekt in IntelliJ erstellt. Dazu habe ich über Project Structure -> Libraries -> Maven eine Bibliothek eingebunden. Diese finde ich auch als jar-Datei links im lib-Ordner. Will ich das Programm ausführen, erhalte ich den Compiler-Fehler, dass die von mir benutzen Packages nicht gefunden wurden.
Compiler-Ausgabe:
18:37:49: Executing task 'Main.main()'...
> Task :compileJava FAILED
C:[gekürzt]\src\main\java\Main.java:1: error: package org.firmata4j does not exist
import org.firmata4j.IODevice;
^
C:[gekürzt]\src\main\java\Main.java:2: error: package org.firmata4j.firmata does not exist
import org.firmata4j.firmata.FirmataDevice;
^
C:[gekürzt]\src\main\java\Main.java:12: error: cannot find symbol
IODevice device = new FirmataDevice("COM3"); // using the name of a port
^
symbol: class IODevice
location: class Main
C:[gekürzt]\src\main\java\Main.java:12: error: cannot find symbol
IODevice device = new FirmataDevice("COM3"); // using the name of a port
^
symbol: class FirmataDevice
location: class Main
4 errors
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':compileJava'.
> Compilation failed; see the compiler error output for details.
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
* Get more help at https://help.gradle.org
BUILD FAILED in 2s
1 actionable task: 1 executed
Compilation failed; see the compiler error output for details.
18:37:52: Task execution finished 'Main.main()'.
_____________________________________________________________________________
Warum gibt erst der Compiler den Fehler aus, dass die Packages - warum auch immer - nicht gefunden werden konnten und nicht schon IntelliJ selbst?
Mein Java-Code:
import org.firmata4j.IODevice;
import org.firmata4j.firmata.FirmataDevice;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException, InterruptedException {
System.out.println("Moinsen!");
IODevice device = new FirmataDevice("COM3"); // using the name of a port
device.start(); // initiate communication to the device
device.ensureInitializationIsDone(); // wait for initialization is done
}
}
1 Antwort
Ich habe es mal kurz folgendermaßen durchgespielt:
- IntelliJ gestartet und ein neues Maven-Projekt angelegt.
- Die IDE generiert die pom.xml und öffnet sie sogleich in einem Tab.
- Wie auf der GitHub-Seite des Projekts beschrieben, habe ich die Dependency hinzugefügt. Zuvor ist noch der dependencies-Tag drumherum notwendig (s. u.).
- Ein Popup erscheint, in dem mir angeboten wird, die Änderungen zu importieren, was ich sogleich machen lasse.
- Danach erstelle ich unter src/main/java eine neue Klasse (Main.java) und füge deinen Quellcode ein.
- Danach baue ich das Projekt (Strg + F9). Das wird bei mir erfolgreich durchgeführt.
<dependencies>
<dependency>
<groupId>com.github.kurbatov</groupId>
<artifactId>firmata4j</artifactId>
<version>2.3.7</version>
</dependency>
</dependencies>
Wenn ich das Programm via Run ausführen lasse, bekomme ich ebenfalls einen Fehler:
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Exception in thread "main" java.io.IOException: Cannot start firmata device
at org.firmata4j.transport.SerialTransport.start(SerialTransport.java:65)
at org.firmata4j.firmata.FirmataDevice.start(FirmataDevice.java:151)
at Main.main(Main.java:10)
Caused by: jssc.SerialPortException: Port name - COM3; Method name - openPort(); Exception type - Port not found.
at jssc.SerialPort.openPort(SerialPort.java:167)
at org.firmata4j.transport.SerialTransport.start(SerialTransport.java:56)
... 2 more
Das wird allerdings damit zusammenhängen, dass ich das Programm nicht auf einem Arduino ausführen lasse.
Hierzu komme ich zu dem selben Ergebnis wie oben. Wieder Schritt für Schritt:
- Ich erstelle ein neues Gradle-Projekt.
- Nachdem das neue Projekt vollständig geladen wurde, habe ich die build.gradle geöffnet und die Dependency ergänzt (s. u.).
- Die Änderung speichern - ich bekomme wieder einmal ein Popup angezeigt und aktualisiere darüber das Projekt. Die Bibliothek wird heruntergeladen.
- Unter src/main/java habe ich eine neue Main.java mit deinem Code eingefügt.
- Wenn ich das Programm ausführen lasse, bekomme ich wieder denselben Fehler, wie schon oben in meiner Antwort gepostet.
In der build.gradle sieht das dependencies-Objekt so aus:
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
compile group: 'com.github.kurbatov', name: 'firmata4j', version: '2.3.7'
}
Den JUnit-Verweis benötigt man natürlich nicht.
Bei mir kommt leider kein Popup :( Keine Ahnung, was ich falsch mache ...
Aber auch als Gradle-Projekt funktioniert es nicht.