Wpis z mikrobloga

Ogarnia ktoś konfigurację mavenowego projektu w Intellij IDEA?

Wykonałem
1. Nowy projekt mavenowy
2. Dodałem zależność - guave
3. Napisałem przykładowy kod używający guave
4. Kliknąłem "install" w oknie "Maven Project" w IDE
i mam poniższe problemy

Problemy:
1. Zbudowany JAR ma plik MANIFEST.MF bez sprecyzowanej startowej klasy (atrybut Main-Class), chciałbym bez dodatkowych mavenowych pluginów to załatwić, tak jak da się uruchamialnego jara zbudować z poziomu komend.
Na wyprodukowanym przez IntelliJ JARze wyskakuje błąd:

no main manifest attribute, in D:\IdeaProjects\myapp\target\myapp-1.0-SNAPSHOT.jar

2. Po tymczasowym naprawieniu 1 pluginem, wyskakuje kolejny błąd przy uruchamianiu jara, tym razem

Exception in thread "main" java.lang.NoClassDefFoundError: com/google/common/base/Splitter

at GuavaTest.main(GuavaTest.java:8)

Caused by: java.lang.ClassNotFoundException: com.google.common.base.Splitter


Jeśli robiłem zwykłe kompilowanie w IDE program działał.
W oknie narzędziowym Mavena w IDE widać Dependencies guavy, w oknie projektu - sekcja External Librares widać guavę.
W edytorze IDE podpowiada mi funkcje z tej biblioteki.
W pliku pom.xml jest dodany wpis z zależnością
pom.xml

ps. szukałem na googlach i dalej szukam, ale liczę, że ktoś rozprawił się już z tym problemem i pomoże (,)
#java #naukaprogramowania #programowanie #intellij #maven
  • 8
@Nevtrus: inaczej - jak robiłem tutorial ze strony mavena i użyłem pluginu archetype i wygenerowałem prosty projekt, tam była chyba dodana zależność junit i działało (z tym, że na cmd używam pobranego mavena, w IDE mam wbudowanego innego mavena chyba).

@SuppressWarnings popróbuję, dzięki
myślałem, że moja rola w dodawaniu zależności kończy się po dopisaniu jej w pom.xml i, że ten plik określa podczas "cyklu życia" jakie zależności ma, jak się nazywa
@Eoghan: hmm, odniosłem wrażenie, że IntelliJ IDEA ma jakieś swoje ustawienia projektów, zależności, bibliotek i modułów i z tych informacji korzysta jak uruchamia z poziomu IDE konkretne "fazy mavena" (czyli np. mvn install)
i że to może być problemem

koncept rozumiem (przynajmniej tak mi się wydaje, bo dopiero się ucze tego): narzucony schemat folderów i nie ważne jakie narzędzie, maven dostarczy co trzeba i uruchomi odpowiednio skonfigurowane polecenia a pliki źródłowe
@mk321: ale czy potrzebowałeś do 1 pluginu jak nie korzystałeś z mavena i sam sobie wpisywałeś

jar -cvf jarfile sourcefile
a potem

java -jar jarfile
bo z tego co ja kojarzę to nie i to działało.

Pewnie będę używał pluginu, tylko wolałbym wiedzieć czemu nie robi tego mvn install, by dało się to uruchomić.
Czytałem, że maven jest o tyle dobry, bo sporo rzeczy działa defaultowo i nic nie trzeba konfigurować
Dla potomnych, znalazłem takie rozwiązania:
1) Stworzenie artefaktu jar-a z zależnościami w IDE (nie korzysta z maven)
2) plugin maven-assembly-plugin
3) użycie pluginu do wygenerowania wpisu o zależnościach w pliku MANIFEST.MF a samo wskazanie MainClass jako parametr polecenia uruchomieniowego: java -cp target/my-jar.jar StartClass