Tag Archives: start with maven

Εισαγωγή στο maven (Σε Ubuntu Linux Πάντα)

To maven σύμφωνα με την πρόσφατη εμπειρία μου είναι κάτι αντίστοιχο του make για java που σου επιτρέπει να προσθέτεις έξτρα βιβλιοθήκες (αν χρειάζεται) και να κάνει compile με αυτές το πρόγραμμα σου σε java.

Σε ubuntu τo εγκαθιστάτε με την εντολή:

sudo apt-get install maven

Εφόσον το δημιουργήσαμε μπορούμε με την εντολή:

 mvn -B archetype:generate  -DarchetypeGroupId=org.apache.maven.archetypes  -DgroupId=<βασικό package>  -DartifactId=<όνομα project>

Να δημιουρήσεις ένα βασικό java application

Που στην ουσία θα δημιουργήσει έναν φάκελο <όνομα project> και μέσα σε αυτό θα δημιουργήσει:

  1. Τον φάκελο source που εμπεριέχει τα εξής:
    1. Τον path java/main που βάζεις τον κώδικα Java (εντός του φακέλου που αντιστοιχεί στο <βασικό package>) πχ. αν το βασικό package το λένε kouradoulis θα κάνει το path java/main/kouradoulis Δείτε στο παράδειγμα ποιο κάτω για καλύτερη κατανόηση.)
    2. Το path java/test που είναι για λόγους τεστ.
  2. Το αρχείο pom.xml που βάσεις τις ρύθμιση για compiling και packaging.

Παράδειγμα:Δημιουργία βασικού project με μια κλάση

Εφόσον έχουμε εγκαταστήσει το maven δίνουμε:

mvn -B archetype:generate  -DarchetypeGroupId=org.apache.maven.archetypes  -DgroupId=test -DartifactId=mvnf

Και δημιούργησε το project στον φάκελο mvn με αυτήν την δομή αρχείων:


mvnf
├── pom.xml
└── src
    ├── main
    │   └── java
    │       └── test
    │           └── App.java
    └── test
        └── java
            └── test
                └── AppTest.java

Όπως βλέπεται το βασικό Πακέτο test είναι στην διαδρομή: src/main/java έτσι εκεί βάζετε  όλο τον κώδικα java και τα πακέτα (Καμία σεση με τα πακέτα .deb ή .rpm του Linux).

Το pom.xml θα έχει το περιεχόμενο:


<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>test</groupId>
<artifactId>mvnf</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>mvnf</name>
<url>http://maven.apache.org</url>
<dependencies>
 <dependency>
   <groupId>junit</groupId>
     <artifactId>junit</artifactId>
     <version>3.8.1</version>
     <scope>test</scope>
  </dependency>
</dependencies>
</project>

Και προκειμένου να τρέξει Θα πρέπει να προσθέσουμε μερικά πραγματάκια:
A) Να του ορίσουμε main class
B) Να του ορίσουμε την έκδοση της java γιατί από προεπιλογή τρέχει σε 1.3 έτσι τα annotations του στυλ @Override της Java 1.5 και νεότερες εκδόσεις δεν τα παίζει.

Για το A το pom.xml γίνεται έτσι (Οι Αλλαγές είναι με μπλε):


<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>test</groupId>
<artifactId>mvnf</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>mvnf</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
 <build>
  <plugins>
    <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-jar-plugin</artifactId>
              <configuration>
                  <archive>
                      <manifest>
                          <addClasspath>true</addClasspath>
                          <mainClass>test.Application</mainClass>
                      </manifest>
                  </archive>
              </configuration>
          </plugin>
   </plugins>
 </build>
</project>

Σημείωση: Εκεί που λέει <mainClass> … </mainClass> ανάμεσα σε αυτά τα tags βάζουμε την κλάση (Με την πλήρη διαδρομή του πακέτου) Που εμπεριέχει την main μέθοδο

Για το B κάνουμε τις αντίστοιχες αλλαγές στο pom.xml


<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>test</groupId>
<artifactId>mvnf</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>mvnf</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
   <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>2.3.2</version>
        <configuration>
            <source>1.7</source>
            <target>1.7</target>
        </configuration>
    </plugin>
    <plugin>
       <groupId>org.apache.maven.plugins</groupId>
       <artifactId>maven-jar-plugin</artifactId>
       <configuration>
           <archive>
              <manifest>
                <addClasspath>true</addClasspath>
                 <mainClass>test.App</mainClass>
              </manifest>
            </archive>
        </configuration>
    </plugin>
</plugins>
</build>
</project>

Σε απλά Ελληνικά στις γραμμές <source></source> και <target></target> βάζουμε την έκδοση της java με την οποία θα γίνεται compile.

Πριν κάνουμε Compile ας δούμε τι έχει τι έχει το App.java που βρίσκεται στο ./src/main/java/test:


package test;

/**
 * Hello world!
 *
 */
public class App 
{
    public static void main( String[] args )
    {
        System.out.println( "Hello World!" );
    }
}

Που σε απλά Ελληνικά Σημαίνει ότι θα εκτυπώνει Hello World! στην κονσολά.

Γενικά για compile δίνεις:

mvn compile

και για εκτέλεση:

mvn exec:java -Dexec.mainClass="<package>.<Κλάση με την main μέθοδο>"

Στο παράδειγμά μας δίνουμε:

mvn compile

Και για να το εκτελέσουμε:

mvn exec:java -Dexec.mainClass="test.App"

Που στο παράδειγμα αυτό στην θέση του package είναι το test και στην θέση της κλάσης με την main μέθοδο το App.
Στην δικιά σας περίπτωση μπορεί το πακέτο να έχει άλλη ονομασία πχ. den.antexw.allo.diavasma η org.intracom δηλαδή σε απλά Ελληνικά δίνεις όλη την διαδρομή του πακέτου και το τέλος την κλάση που έχει την main μέθοδο.

Ακόμη αν σας πετάξει ένα κάρο Κινέζικα μην παραξενευτείτε το μήνυμά σας θα είναι λίγε γραμμές πριν το BUILD SUCCESS. Πχ. όταν το έτρεξα εγώ μου έδωσε:


pcmagas@dimitris:~/Kwdikas/java/mvnf$ mvn exec:java -Dexec.mainClass="test.App"
[INFO] Scanning for projects...
[WARNING]
[WARNING] Some problems were encountered while building the effective model for test:mvnf:jar:1.0-SNAPSHOT
[WARNING] 'build.plugins.plugin.version' for org.apache.maven.plugins:maven-jar-plugin is missing. @ line 28, column 10
[WARNING]
[WARNING] It is highly recommended to fix these problems because they threaten the stability of your build.
[WARNING]
[WARNING] For this reason, future Maven versions might no longer support building such malformed projects.
[WARNING]
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building mvnf 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- exec-maven-plugin:1.3.2:java (default-cli) @ mvnf ---
[WARNING] Warning: killAfter is now deprecated. Do you need it ? Please comment on MEXEC-6.
Hello World!
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.328s
[INFO] Finished at: Sat Feb 14 07:47:22 EET 2015
[INFO] Final Memory: 8M/107M

Παρατηρήστε τα μπλέ γράμματα που είναι το μύνημα που θέλουμε να δούμε (δεν εκτυπώνονταν το μύνημα με μπλε γράμματα στην κονσόλα εγώ το έκανα για να είναι κατανοητό)

Για να κάνουμε πακέτο .jar δίνουμε:

mvn package

Και το αρχείο με κατάληξη .jar θα το βρείτε στο φάκελο target. Που μπορείτε να το εκτελέσετε με την εντολή:

java -jar ./target/όνομα_αρχείου_jar

Για το παράδειγμα αυτό έδωσα:

java -jar ./target/mvnf-1.0-SNAPSHOT.jar

Αν δεν τρέχουν οι 2 παραπάνω εντολές τότε κάνε cd στον φάκελο που έχει δημιουργηθεί το maven project. Μπορείτε να το κάνετε δίνοντας την εντολή:

cd όνομα φακέλου

Τέλος όπου σας δείχνει BUILD SUCESS τότε έχει εκτελεστεί με επιτυχία η εντολή ειδάλλως θα σας δείξει BUILD FAILED.