インテリセンスや、ライブラリをエディタが認識できない
IntelliJ を使っていて、Maven artifact 生成からプロジェクトを開始した時にインテリセンスはおろか、Mavenのタスクだとコンパイルできるのに、エディタが認識しない。結構悩んだけど、これをヒントに解いた
結局したとこは、
プロジェクト右クリック > Maven > ReImport
で解決。(そんなん知らんわ)
ちなみに、その前に調査しているときに、関係ないと思うけど、ソースディレクトリと、テストのディレクトリの設定をした。
場所が、プロジェクトを選択して、File > Project Settings > Modules > Source で設定できる。
でも多分ReImportで解決していると思われる。
Kafka Client をIntelliJで実行すると slf4j エラー
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.
くそハマった。これは、上記のURLを見ると、ライブラリをpom.xml に足すと良いと言われる。ブログや、スタックオーバーフローもそう言っているが、全く解決できなかった。しかし、知らん間に治った。おそらく、ライブラリを追加した設定が本来有効であるはずなのに、古いものをみていた雰囲気があるが、今となっては原因はわからない。
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-jdk14</artifactId>
<version>1.7.25</version>
</dependency>
pom.xml に上記のをたして、clear,install,compile とかしても、治らなかったので、手動で確認しようとして、下記のプラグインを入れて、ゴネゴネしていて、久々にIntelliJから実行すると、意味わからないけど、動作した。
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
<configuration>
<mainClass>simplearchitect.App</mainClass>
</configuration>
</plugin>
- SLF4J warning or error messages and their meanings
- Solving Failed to load class “org.slf4j.impl.StaticLoggerBinder” Error
これは多分IntelliJの挙動を私が理解していないため。このライブラリは、IntelliJ からではなく、MavenのDependencyを参照しながら、アプリをマニュアルで実行するプラグイン。mvn exec:java
で動作する。こちらでは問題なく動いていた。
ちなみに、ターゲットのライブラリのバージョンを知るには
mvn dependency:tree
もしくは、IntelliJ のmaven パネルで確認すると良い。
Error: java: javacTask:source release 8 requires target release 1.8
これは、artifact で生成したテンプレートが、1.7になっていたため。pom.xmlを書き換える。
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
しかし、これだけではダメで、上記のReImport が必要。Preference > Build, Execution, Deployment > Compiler > Java Compiler のプロジェクトの、Target bytecode version が古いままのため。
忘れないようにメモ