Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Problém s kompilátorem

V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Tomáš Koreczki:29.10.2023 21:27

Zdravím,
mám problém se zkompilováním některých příkazů v javě. Používám Apache NetBeans IDE 18, v něm je jestli jsem to vyčetl spravně maven plugin compilator 3.8.0. Můj problém začíná v tom, že některé metody, které mi IDE nabízí mi potom neprojdou přes kompilátor. Pro příklad mohu uvést na tříde Random příkaz nextInt - zde mi IDE povolí vložit interval (nextInt(10, 20)) ale při kompilaci se objeví chyba metody nextInt, která vyžaduje pouze jeden argument. Další příkazy, které jsem našel nefunkční při kompilaci byly stream.toList() - zde to píše cannot find symbol toList, a na Stringovém řetězci metoda formatted píše cannot find symbol formatted.

Zkusil jsem: Po několika hodinovém neúspěšném hledání problému s kompilátorem (na fórech) jsem všechny metody přepsal ekvivalentní, ale trochu delší úpravou (u randomu vygenerování náhodného čísla a posunutí do správného intervalu, metodu toList na streamu opsaním pomocí Collections, a formatted byl nahrazen příkazem String.format).

Chci docílit: Důvodem proč to řeším je, že na projektu pracujeme ve dvou přes GitHub a ikdyž používáme stejné IDE, tak jednomu se Build povede, druhému to vyhodí compilation error.

Budu rád za jakoukoliv informaci proč tomu tak jak a případně jak tomu předejít.

 
Odpovědět
29.10.2023 21:27
Avatar
Atrament
Tvůrce
Avatar
Odpovídá na Tomáš Koreczki
Atrament:30.10.2023 7:36

To spíš zní, že máš špatně importy, nextInt na Random má a vždycky mělo jenom jeden parametr. Každopádně Maven není kompilátor, ten s tím nic mít společného nebude... Zkontroloval bych, zda oba používáte stejné JDK

 
Nahoru Odpovědět
30.10.2023 7:36
Avatar
Odpovídá na Atrament
Tomáš Koreczki:30.10.2023 17:10

Knihovnu pro random mam java.util.random, JDK je zkontrolováno a je stejné, zkoušel jsem natahovat i jiné verze JDK, ale problém zůstal stejný. Předpokládám, že to opravdu bude někde v nastavení, bohužel netuším co ani kde mám nastavit aby se mi nehádalo IDE, které mi příkaz samo nabízí a kompilátor, který ho nezná.

 
Nahoru Odpovědět
30.10.2023 17:10
Avatar
Atrament
Tvůrce
Avatar
Odpovídá na Tomáš Koreczki
Atrament:30.10.2023 17:31

A co přesně to píše, nebyl by nějaký screenshot?

 
Nahoru Odpovědět
30.10.2023 17:31
Avatar
Odpovídá na Atrament
Tomáš Koreczki:30.10.2023 22:08

Tady posílám ty screeny, pro úplnost jsem u toho nextInt vložil i to co mi nabízí IDE, další zbylé dva obrázky jsou po po pokusu o kompilaci.

 
Nahoru Odpovědět
30.10.2023 22:08
Avatar
Atrament
Tvůrce
Avatar
Odpovídá na Tomáš Koreczki
Atrament:30.10.2023 23:55

Tak koukám, že metoda nextInt se dvěma parametry je 'novinka' verze 17, to mi uniklo :) Ale jinak teda nevím, tam bude něco shnilého v celkovém nastavení, asi bych to řešil odinstalací Netbeans a Javy a opětovnou čistou instalací, rovnou Netbeans verze 19, případně bych v nastavení projektu na záložce Build-Compile zkusil nastavit jinou Java Platformu, pokud tam máš jenom tu jednu, tak pomocí tlačítka Manage Java Platforms a Add Platform v dalším okně můžeš přidat nějakou další

 
Nahoru Odpovědět
30.10.2023 23:55
Avatar
Odpovídá na Atrament
Tomáš Koreczki:31.10.2023 0:39

Obavam se, že i toto už sem zkoušel, dokonce ve variantě přeinstalování celého OS abych měl jistotu, že mi nezůstane žádné nastavení v registrech. Platformu jsem taky zkoušel měnit, ale u té si nejsem jistý jestli správně. Napadá mě teď, že některé nastavení vyžadují restart programu. Tak ještě zkusím znova tu platformu s restartem.

 
Nahoru Odpovědět
31.10.2023 0:39
Avatar
Atrament
Tvůrce
Avatar
Odpovídá na Tomáš Koreczki
Atrament:31.10.2023 7:31

A co se stane když vytvoříš nový Java With Maven projekt a zkusíš přeložit ten?

 
Nahoru Odpovědět
31.10.2023 7:31
Avatar
Odpovídá na Tomáš Koreczki
Petr Štechmüller:31.10.2023 9:29

Ahoj,
problém je čistě v konfiguraci maven-compiler-pluginu.
Z nějakého důvodu si vývojáři tohoto pluginu řekli, že ve výchozím nastavení se bude kód kompilovat do Javy 8, viz tento link.

Takže řešení je více než jednoduché. Musíš toto nastavení přepsat. To uděláš tak, že půjdeš do pom.xml najdeš tam mezi dependencies maven-compiler-plugin a přiřadíš mu následující konfiguraci:

<configuration>
    <source>17</source>
    <target>17</target>
</configuration>

Nejdůležitější parametr je target. Ten určuje, do jaké verze Javy se ti kód bude kompilovat. Dneska by se už mohla použít i verze 21, ale viděl jsem, že máš nainstalovanou verzi 17...

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
31.10.2023 9:29
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Odpovídá na Petr Štechmüller
Tomáš Koreczki:31.10.2023 14:00

Super, děkuju moc tohle pomohlo.

 
Nahoru Odpovědět
31.10.2023 14:00
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 10.