NetBeans Maven - pierwszy projekt

0

Witam, wczoraj zacząłem się uczyć Mavena. Postanowiłem działać na tym wbudowanym do Netbeansa. Z tego co wyczytałem, to struktura podstawowego projektu w Mavenie powinna skladac sie z pom.xml i source, gdzie wewnatrz w main znajdowac sie powinny foldery java i resources. Niestety mam problem, gdyz Netbeans nie generuje folderu resources oraz nie tworzy glownej klasy App.java wewnatrz zdefiniowanego pakietu.

Dodam takze, ze resources nie chca sie tez tworzyc poprzez wywolanie w konsoli: mvn archetype:generate.

W czym problem?

2
  1. Odinstaluj NetBeans
  2. Zainstaluj IntelliJ
  3. Profit.
0

No tak. Jak cos nie dziala to najprosciej przeskoczyc na inny soft. Wolalbym tego jednak poki co uniknac i to rozwiazanie zastosowac w ostatecznosci.

IDE to jedno. Ale poleceniem z konsoli powinno mi chyba wygenerowac poprawnie szkielet?

0

Z tego co pamiętam NetBeans widzi projekty jako osobne.

  1. Tworzysz projekt w javie
  2. Tworzysz projekt w Mavenie
  3. Spinasz je

Gdzieś w narzędziach jest maven jak będziesz miał aktywny podstawowy projekt w javie.

0

Co to za problem utworzyc folder? Mozesz go po prostu dodac w files.

Struktura folderow jest ustandaryzowna. Jak masz utworzone katalogi src/main/java i src/main/test czy tam src/test/java to mozna sie latwo domyslic, ze brakuje folderu src/main/resources. Jak go utworzysz bedziesz mial problem z glowy. :)

Jak chcesz miec maina to dodajesz dowolna klase, nie musi nazywa sie App. I w pom.xml musisz wskazac klase, ktora zawiera metode (maven-jar-plugin) musi utworzyc Manifest:

public static void main(String [] args) {
}

Jak uzywasz zewnetrznych bibliotek to polecam plugin one-jar.

    <build>
        <plugins>
            <plugin>
                <groupId>org.dstovall</groupId>
                <artifactId>onejar-maven-plugin</artifactId>
                <version>1.4.4</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>one-jar</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>2.6</version>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <mainClass>pl.margor.MainClass</mainClass>
                        </manifest>
                    </archive>
                </configuration>                
            </plugin>
     </plugins>
</build>

Potem z command line $ mvn one-jar.

0
margor90 napisał(a):

Co to za problem utworzyc folder? Mozesz go po prostu dodac w files.

Struktura folderow jest ustandaryzowna. Jak masz utworzone katalogi src/main/java i src/main/test czy tam src/test/java to mozna sie latwo domyslic, ze brakuje folderu src/main/resources. Jak go utworzysz bedziesz mial problem z glowy. :)

No teoretycznie zaden problem. Ale skoro ten mechanizm ma ulatwiac zycie to chyba powinen generowac kompletna strukture folderow lacznie z tym resources i dlatego mnie to dziwi, ze w oficialnej dokumentacji czesto odwoluja sie do tego folderu, a nie pisza czy samemu zawsze nalezy utworzyc czy sam powinien sie generować.

margor90 napisał(a):

Jak chcesz miec maina to dodajesz dowolna klase, nie musi nazywa sie App.

I znowu piszesz o utworzeniu samemu, ale w koregokolwiek tutoriala nie spojrze tam zawsze glowna klasa tworzona jest automatycznie.

margor90 napisał(a):

I w pom.xml musisz wskazac klase, ktora zawiera metode (maven-jar-plugin) musi utworzyc Manifest:

public static void main(String [] args) {
}

Tego zdania nie kumam ;/

margor90 napisał(a):

Jak uzywasz zewnetrznych bibliotek to polecam plugin one-jar.

Potem z command line $ mvn one-jar.

To jest polecenie do tworzenia plików .jar? Czy to ma zblizone dzialanie do mvn install? Wtedy rowniez tworzony jest plik .jar...

Sorry za byc moze trywialne pytania, ale kazdy kiedys zaczynal..

0
Kubaz napisał(a):

No teoretycznie zaden problem. Ale skoro ten mechanizm ma ulatwiac zycie to chyba powinen generowac kompletna strukture folderow lacznie z tym resources i dlatego mnie to dziwi, ze w oficialnej dokumentacji czesto odwoluja sie do tego folderu, a nie pisza czy samemu zawsze nalezy utworzyc czy sam powinien sie generować.

Zawsze możesz tworzyć własne szablony archetypów maven, jeśli obecnie dostępne nie spełniają Twoich oczekiwań.

margor90 napisał(a):

I znowu piszesz o utworzeniu samemu, ale w koregokolwiek tutoriala nie spojrze tam zawsze glowna klasa tworzona jest automatycznie.

Często nie potrzebujesz głównej klasy. Każdy archetyp maven jest inny. Dla mnie to nie jest zagadnienie. Częściej tworzę testy niż metody main. Mam tak naprawdę gotowe templaty ustawień mavena pod moje projekty, niezależne od IDE, tylko kopiuje co potrzebuje.

margor90 napisał(a):

Tego zdania nie kumam ;/

Nie jest oczywiste, która klasa zawiera metodę main. Trzeba to powiedzieć. Do tego służy manifest (znajduje się w archiwum .jar). Trzeba powiedzieć, która klasa ma otworzyć pętle programu. Z poziomu IDE tego nie widać i się uruchomi, ale jak zrobisz w konsoli $ java -jar moje_archiwum.jar to zobaczysz problem.

margor90 napisał(a):

To jest polecenie do tworzenia plików .jar? Czy to ma zblizone dzialanie do mvn install? Wtedy rowniez tworzony jest plik .jar...

Jak wykonujesz mvn package zewnętrzne biblioteki nie zostaną dołączone. Wygodnie jest je mieć w jednym archiwum, aby móc uruchomić aplikację np. na innym komputerze np. przez java -jar aplkacja.jar. Inaczej zobaczysz informacje o brakujących zależnościach, np. jeśli używasz springa. Jak używasz maven war/ear nie masz takich problemów.

0
> 
> Jak uzywasz zewnetrznych bibliotek to polecam plugin one-jar.
> 
```xml
    <build>
        <plugins>
            <plugin>
                <groupId>org.dstovall</groupId>
                <artifactId>onejar-maven-plugin</artifactId>
                <version>1.4.4</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>one-jar</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>2.6</version>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <mainClass>pl.margor.MainClass</mainClass>
                        </manifest>
                    </archive>
                </configuration>                
            </plugin>
     </plugins>
</build>

Potem z command line $ mvn one-jar.

Hmm.. powiedz czy dobrze rozumuje. Czyli mamy tutaj dwa pluginy. "onejar-maven-plugin" i "maven-one-jar". Ten pierwszy sluzy do importowania określonego .jar (skąd program wie, skad pobrac?(*)), a ten drugi do generowania "wspólnego" .jar?

(*)Zgodnie z http://onejar-maven-plugin.googlecode.com/svn/mavensite/usage.html czy chodzi o określenie znacznika <pluginRepository> wraz z <id> i <url> wewnatrz?

Tak też właśnie zrobiłem i użyłem dla testów podanego przez Ciebie kodu w programie i pojawił się error:
"Failed to execute goal org.dstovall:onejar-maven-plugin:1.4.4:one-jar (default) on project mavenproject1: Execution default of goal org.dstovall:onejar-maven-plugin:1.4.4:one-jar failed: basedir D:...\dllextract does not exist -> [Help 1]"

0

Prawdopodobnie przepisałeś raczej bez sensu kod mergujące natywne dll (JNI).

U mnie poza build miałem dokładnie:

    <pluginRepositories>
        <pluginRepository>
            <id>onejar-maven-plugin.googlecode.com</id>
            <a href="http://onejar-maven-plugin.googlecode.com/svn/mavenrepo">http://onejar-maven-plugin.googlecode.com/svn/mavenrepo</a>
        </pluginRepository>
    </pluginRepositories>

mvn package zbuduje jara, ale nie zmerguje go z zależnościami pobranymi z centralnego repo. Ten pakiet to w prosty sposób rozwiązuje: masz jedną paczkę do wszystkiego, to dość wygodne.

1 użytkowników online, w tym zalogowanych: 0, gości: 1