Δημιουργία web εφαρμογών σε java (servlet) με Maven

Έχουμε δει το πως να στήνεις σε πολύ απλά τον tomcat σε ubuntu και τα τρέχεις ένα αρχείο .war σε αυτόν (βλ. εδώ) και πως σε maven να κάνεις μια απλή java εφαρμογή (βλ. εδώ). Σήμερα θα δούμε την web πλευρά της java και πως μπορείς σχετικά εύκολα να κάνεις servlets με maven.

Συνέχεια

Kids και 50 Shades of Gray

Σήμερα στο facebook είδα κάποιος να αναρτά αυτό το άρθρο που σε απλά Ελληνικά μια κοπέλα 12-13 χρονών πέθανε επειδή θεώρησαν φαεινή ιδέα ένα αγόρι από την παρέα της να αναπαραστήσουν ότι κάνουν στο 50 Shades of Grey (Που είναι τσόντα – υπερπαραγωγή, μια ποιο ακριβή version με σενάριο της ταινίας της Τζούλιας με λίγο μαστίγωμα παραπάνω, sugarcoated με ρομαντισμό για να αρέσει στις γυναίκες).

Και η πρώτη σκέψη που μου πέρασε στο μυαλό είναι, το αγόρι θα την κατέβασε πειρατικά και θα την είδε, δεν νομίζω ότι θα υπήρχε κάποιο σινεμά που να επιτρέπει σε άτομα κάτω των 18 να  δουν τέτοιου είδους ταινία. Και γι αυτό το θέμα λέω, έχεις ένα παιδί σε pc και λόγο, τυπικέ Έλληνα γονέα, ότι δεν έχεις ιδέα από υπολογιστές αφήνεις το παιδί να κάνει ότι του καπνίσει, μέχρι να κατεβάζει τσόντες, και δεν λες να βάλεις το pc κάπου που να έχεις άμεση οπτική επαφή με την οθόνη του από μια απόσταση μερικών μέτρων έτσι να ελέγχεις τι στο καλό κάνει  το παιδί όταν χρησιμοποιεί τον υπολογιστή.

Του πούστη αν το pc είναι σε κοινόχρηστο χώρο θα δείς αν το παιδί βλέπει τσόντες η όχι και ειδικά αν είναι κάπου κοινόχρηστα αποθαρρύνεις το παιδί να δει τσόντα ειδικά στην ευαίσθητη ηλικία 12-13 που αρχίζει να μεταβαίνει στην ενηλικίωση και είναι ποιο επηρεπείς σε σεξουαλικές παροτρύνσεις, λόγο ορμονών. Δεν χρειάζεται πυρινική φυσική απλά λίγο μυαλό, κοινή λογική και στην χειρότερη περίπτωση λίγη εφευρετικότητα, και δεν είναι ανάγκη να είσαι και top master και με 12 Ph.D για να ελέγχεις ένα pc και το βλέπει το παιδί σου σε αυτό.

Και έτσι είπα  2-3 λόγια από κάτω και το άτομο που έβαλε το link αυτό μου είπε ότι υπάρχουν περιπτώσεις που βλέπουν παιδιά την ταινία στο Σινεμά με την ΣΥΝΕΝΕΣΗ ΤΩΝ ΓΟΝΕΩΝ παρόλο που οι υπάλληλοι του κινηματογράφου λένε ότι το παιδί ΔΕΝ ΜΠΟΡΕΙ ΝΑ ΔΕΙ ΤΗΝ ΤΑΙΝΙΑ και ΣΥΝΕΝΕΣΕ ΝΑ ΤΗΝ ΔΕΙ και να πω ότι δεν ήξερες του πούστη έχει βουήξει ο τόπος για την Εν λόγο ταινία. Έστω και να μην έχεις ακούσει τίποτα από την στιγμή που ο ίδιος κινηματογράφος σου λέει ότι το παιδί ΔΕΝ μπορεί να δει την ταινία δεν σου κόβει λίγο ΓΙΑΤΙ ΔΕΝ ΠΡΕΠΕΙ ΝΑ ΤΗΝ ΔΕΙ.

Και ΟΚ πες ότι πας τον Γιο η την Κόρη να δει τέτοιου είδους ταινίες για «Σεξουαλική Διαπεδαγώγηση», μάγκες εκεί σας βγάζω την κόκκινη κάρτα, το πως να βάζεις την γυναίκα κάτω να βγάζεις την μαλαπέρδα σου και χωρίς να νοιάζεσαι για τα συναισθήματα σας να το κάνουν όπως στο Discovery Channel δεν είναι αντικείμενο σεξουαλικής διαπαιδαγώγησης.

Σεξουαλική διαπαιδαγώγηση είναι να μαθαίνουν το πως γίνονται τα παιδιά και το πως να μαζεύουν την «μαλαπέρδα» του η την «σπηλιά» της μην πάθει κάποιο νόσημα, καθώς και τα σεξουαλικά νοσήματα που μπορεί να πάθει με την αχαλίνωτο τρόπο ικανοποίησης. Σεξουαλική διαπαιδαγώγηση είναι το παιδί να καταλάβει ότι η «μαλαπέρδα» είναι για λίγες και εκλεκτές και όχι ότι η «σπηλιά» είναι αντικαταστάτης της Μαριάς Παλάμη και ούτε μια καλύτερη version αυτής, ομοίως η γυναίκες αντίστοιχα πρέπει να μάθουν ότι η «σπηλιά» είναι για λίγους και όχι δημόσια περιουσία και ούτε χωράφι προς πώληση.

Παίδες νομίζω έχω την εντύπωση πως ο κόσμος έχε πουτανέψει. Δεν είπαμε να κράζουμε την κοπέλα σαν ιερόδουλη λόγο ότι έχει την φούστα λίγο πάνω από το γόνατο, αλλά όχι και να θεωρούμε τις γυναίκες υποκατάστατο της Μαριάς Παλάμης. Ναι όλοι έχουμε ορμές αλλά το πως το αντιλαμβανόμαστε κάθε φορά που έχουμε ορμή το τι είναι και να λέμε «σταμάτα», εκεί είναι το μεγαλύτερο παιχνίδι. Και να το πω χύμα όποιος μπορεί και μαζεύει καλύτερα το πουλί του αυτός είναι νικητής.

Lamp Stack (Linux Apaxhe Mysql php) και Virtual Hosts σε Centos 6.6

Εφόσον είδαμε πως να στήσουμε Lamp Stack σε Ubuntu και Debian και πως στήσαμε VirtualHosts σε αυτό ήρθε η ώρα να σας δείξουμε πως να το κάνετε και σε Centos 6.6 (Αν και βγήκε η έκδοση 7, λόγο ότι βγαίνει μόνο σε 64 bit και δεν έχω το κατάλληλο hardware για 64 bit VMs το έκανα σε 6.6).

Εγκατάσταση Apache Mysql php

Κατ’ αρχάς εγκαθιστούμε τον http server, την mysql, την php και κάποια php modules, χρήσιμα για ένα μέσο site, με την εντολή:

yum install httpd mysql php php-devel php-mysql php-pdo php-xml php-imap php-pear.noarch php-gd php-pear

Και μετά για δοκιμή δίνουμε:

echo "<?php phpinfo(); ?>" > /var/www/http/info.php

Και μπορούμε να δούμε αν παίζει δίνοντας στον browser http://^server_address^/info.php ή http://localhost/info.php αν στήνουμε τον server στο ίδιο μηχάνημα.

Ακόμη κάποια site θέλουν το Plugin Imagemagick που εγκαθιστάτε με τις εντολές:

yum install ImageMagick ImageMagick-devel gcc
pecl install imagick
echo "extension=imagick.so" > /etc/php.d/imagick.ini
sudo service httpd restart

 Δημιουργία VirtualHost

Για να ελέγχεται αν το configuration του apache έχει κάποιο λάθος ,που ενδεχομένως να κάνατε εσείς, κατα την διάρκεια εκτέλεσης του οδηγού δίνουμε:

sudo httpd -t

Ο τρόπος που θα δημιουργούμε τα virtualhost είναι ο ίδιος που χρησιμοποιεί το Debian/Ubuntu μόνο που θα τον στήσουμε εμείς Εξ’ αρχής.

Γι αυτό κατ’ αρχάς θα κάνουμε 2 φακέλους, έναν που θα περιέχει όλα τα vhosts και έναν που θα έχει τα «ενεργά» vhosts:

sudo mkdir -p /etc/httpd/vhosts-enabled
sudo mkdir -p /etc/httpd/vhosts-available

Στο folder /etc/httpd/vhosts/vhosts-enabled θα υπάρχουν τα virtual hosts που θα θέλουμε να σερβίρουμε και θα είναι Symbolic Links των αρχείων που θα περιγράφουν τα Vhost που θα βρίσκονται στον φάκελο /etc/httpd/vhosts/vhosts-available και θα είναι αρχεία υπό μορφή *.conf

Και για να «ενεργοποιήσουμε» ανοίγουμε με τον αγαπημένο μας editor:

sudo nano /etc/httpd/conf/httpd.conf

Αν δεν έχετε τον nano μπορείτε ή να το κάνετε με vi η να τον εγκαταστήσετε με την εντολή:

sudo yum install nano

Κάνουμε uncomment (αφαιρούμε το # από μπροστά) την γραμμή που λέει

# NameVirtualHost *:80

Και προσθέτουμε στο τέλος του αρχείου τα παρακάτω:

Include vhosts-enabled/*.conf

Και με Ctrl+O αποθηκεύουμε και με Ctrl+X βγαίνουμε από τον Editor

Και δημιουργούμε έναν φάκελο φιλοξενίας των virtual host:

sudo mkdir vhosts

Τώρα αν θέλουμε να δημιουργήσουμε ένα virtual Host δημιουργούμε έναν φάκελο στο /var/www/vhosts που θα περιέχει έναν φάκελο για τα αρχεία του site και έναν φάκελο για τα logs. Αυτό είναι δυνατόν να γίνουν με τις εντολές:


cd /var/www/vhosts
sudo mkdir ^όνομα_vhost^
sudo mkdir ^όνομα_vhost^/htdocs #Φάκελος φιλοξενίας site
sudo mkdir ^όνομα_vhost^/logs #Φάκελος logs

Όπου το ^όνομα_vhost^ ένα χαρακτηριστικό όνομα για το site σας (πχ. το url του)

Μέτα πηγαίνετε στον φάκελο /etc/httpd/vhosts-enabled με την εντολή:

cd /etc/httpd/vhosts-enabled

Με τον αγαπημένο σας editor δημιουργείτε ένα αρχείο που το όνομα θα έχει την μορφή ^όνομα_vhost^.conf

sudo nano ^όνομα_vhost^.conf

Και βάζουμε περιεχόμενο της μορφής:


<Virtualhost *:80>
ServerName ^domain_or_ip^

DocumentRoot  ^path_που_περιεχει_τα_αρχεία_του_σιτε^

DirectoryIndex index.php home.php index.html index.htm

ErrorLog ^Path_για_logs_σφαλμάτων^
CustomLog ^path_για_άλλου_είδους_logs^ combined
</Virtualhost>

Όπου:

  • ^domain_or_ip^: To domain ή η IP που θέλουμε το site να σερβίρετε.
  • ^path_που_περιεχει_τα_αρχεία_του_σιτε^: Εκεί που έχουμε τα αρχεία του site μας (στην περίπτωσή μας /var/www/vhosts/^όνομα_vhost^/htdocs )
  • ^Path_για_logs_σφαλμάτων^: Path που θα καταγράφονται ότι error υπάρχει. (συγκεκριμένη τιμή /var/www/vhosts/^όνομα_vhost^/logs/error.log)
  • ^path_για_άλλου_είδους_logs^: Path που καταγράφονται logs για το ποια IP επισκέπτεται το site. (συγκεκριμένή τιμή /var/www/vhosts/^όνομα_vhost^/logs/custom.log)

Το virtualhost το ενεργοποιούμε με τις εντολές:

sudo ln -s `pwd`/^όνομα_vhost^.conf ../vhosts-enabled/^όνομα_vhost^.conf

ή εναλλακτικά

sudo ln -s /etc/httpd/vhosts-available/^όνομα_vhost^.conf /etc/httpd/vhosts-enabled/^όνομα_vhost^.conf

Και μετά δίνεις

sudo service httpd restart

και δίνοντας http://^site_url^ στον browser σας μπορείτε να επισκεφτείτε το site σας. (Αρκεί στο /var/www/vhosts/^όνομα_vhost^/htdocs να έχετε βάλει καποιο περιεχόμενο 😉 )
 

Δημιουργία και τρέξιμο web εφαρμογών μέσω Maven και Tomcat σε Ubuntu (Quick ‘n’ Dirty)

Mε την Java μπορείς να κάνεις εφαρμογές που είτε τρέχουν μέσω του Browser (αν και λόγο ότι προσφέρει πολλά κενά ασφαλείας αυτή η μέθοδος δεν χρησιμοποιείται και καλό είναι να έχετε ΑΠΕΝΕΡΓΟΠΟΙΗΜΕΝΑ τα applet από τον Browser σας) είτε μέσω του επονομαζόμενου application server.

Υπάρχουν πολλές επιλογές, σε ubuntu linux μέσω αποθετηρίων μπορείτε να βάλετε έναν από τους 2:

  1. Jboss
  2. Tomcat

Εμείς σε αυτό το άρθρο θα ασχοληθούμε το πως να στήσετε τον tomcat και να τρέχετε εφαρμογές με την χρήση war αρχείων. (Αντίστοιχά των αρχείων .jar αλλά για web εφαρμογές)

Κατ’ αρχάς εγκαθιστούμε τον tomcat

sudo apt-get install tomcat7 tomcat7-admin

Και μπορούμε να την ξεκινήσουμε με την εντολή:

sudo service tomcat7 start

Ομοίως τον σταματάμε με την εντολή:

sudo service tomcat7 stop

Μετά θα δημιουργήσουμε έναν χρήστη με τον οποίο θα μπορούμε να ανεβάσουμε την εφαρμογή μας:
Κατ’ αρχάς ανοίγουμε με τον αγαπημένο μας editor το αρχείο /etc/tomcat7/tomcat-users.xml για το παράδειγμά μας θα χρησιμοποιήσουμε τον nano:

sudo nano /etc/tomcat7/tomcat-users.xml

Και στο αρχείο που θα μας ανοίξει ανάμεσα Στο βάζουμε μια εγραφή της εξής μορφής:

 <user username="%username%" password="%password%" roles="manager-gui,admin-gui" />

Όπου %username% (χωρίς τα %) ένα usernane και %password% (χωρίς τα %) ένα password (Που ΔΕΝ κρυπτογραφείτε από τον tomcat).

Μετά δίνουμε:

sudo service tomcat7 force-reload

Μετά ανοιγουμε έναν browser και δίνουμε http://127.0.0.1:8080/manager ή http://<url_server&gt;:8080/manager αν τον έχουμε εγκαταστήσει σε έναν server με url <url_server>

Θα σας βγάλει ένα παράθυρο που θα σας πει ότι πρέπει να δώσετε ένα username και ένα password. Εσείς δώστε το username και το password που βάλατε στο /etc/tomcat7/tomcat-users.xml και θα σας βγάλει σε μια οθόνη που θα μοιάζει έτσι:
Στιγμιότυπο από 2015-02-28 17:38:32

Εμάς μας ενδιαφέρει η φόρμα που θα είναι όπως αυτή στην παρακάτω εικόνα:
upload_war

Που θέλει ένα αρχείο .war που το βάζουμε εκεί και το κάνουμε Upload και αυτό στην συνέχεια τρέχει την εφαρμογή μας.

Εναλλακτικά τα αρχεία .war μπορείτε να τα βάλετε και στο /var/lib/tomcat7/webapps για να τρέξουν.

Αν έχετε την εφαρμογή σε αρχείο .war τότε δεν χρειάζεται τα παρακάτω.

Για να κάνουμε ένα αρχείο .war θα χρησιμοποιήσουμε το maven. Έχουμε κάνει γι αυτό ένα άρθρο λίιιγο παλαιότερα από τότε που γράφτηκε αυτό το άρθρο.

Τα βήματα είναι τα ίδια με το άρθρο στο προηγούμενο link την εξαίρεση ότι το application αρχικοποιείται με την εντολή (Απλά αν εκτελέσετε την εντολή θα το έχετε έτοιμο δεν χρειάζεται τίποτε παραπάνω):


mvn -B archetype:generate  -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-webapp -DgroupId=<basiko package>  -DartifactId=<onoma project>

Όπου <basiko package>,<onoma project> είναι ότι εξηγεί και το άρθρο για το maven. Ίσως ασχοληθούμε αργότερα, σε άλλο άρθρο για το πως θα κάνουμε την δικιά μας web εφαρμογή σε tomcat.

Εφόσον εκτελέσαμε την εντολή με την εντολή:

cd <onoma project> 

Πάμε στον φάκελο του project που κάναμε και με τη εντολή

mvn package

Κάνουμε ένα αρχείο .war που θα βρίσκεται στο path: <onoma project>/target/<onoma project>.war

Αυτό το αρχείο το επιλέγουμε και το κάνουμε upload στην φόρμα αυτή. (Αν το έχουμε ήδη κάνει upload μπορούμε είτε να του αλλάξουμε όνομα είτε να κάνουμε unload το εν λόγο αρχείο και Ξανά upload)

Μετά μπορούμε να δούμε την εφαρμογή μας να τρέχει στο url: http://:8080/<onoma project> ή στο http://localhost:8080/<onoma project> αν το τρέχουμε τοπικά.

Χριστοπαναγίες

ee161f2f1cc48632

Στην καθομιλουμένη έχει καθιερωθεί μαζί με την λέξη «γαμώ» να συνοδεύεται με σημαντικές προσωπικότητες της Ορθοδοξίας συγκεκριμένα ο Χρίστος και η Παναγία. Και ρε φίλε που μόλις έβρισες θέλω να σε ρωτήσω «ΤΙ ΣΟΥ ΦΤΑΙΕΙ Ο ΧΡΙΣΤΟΣ ΚΑΙ Η ΠΑΝΑΓΙΑ;» δηλαδή τι το  τόσο άσχημο σου έχει κάνει;

Πίστεψέ με στάνταρτ δεν φταίει ούτε ο Χριστός ούτε η Παναγία, που μόλις δεν έβαλε το γκόλ η ομάδα ή δεν νίκησε αυτήν την Κυριακή, ούτε και που δεν μπορείς να δεις το φωτάκι που έχει ανάψει στην πόρτα στην τράπεζα, ούτε επειδή σου κάηκε ο τραχανάς, ούτε και που δεν μπορεί «ο μαλάκας» όπως τον αποκαλείς να κάνει ένα aliased domain. Και σίγουρα δεν φταίει για οτιδήποτε άλλο σου συμβαίνει.

Γι αυτό ΣΤΑΜΑΤΑ ΝΑ ΒΡΙΖΕΙΣ δεν σπάς μόνο τα νεύρα η κάτι χειρότερο αλλά προσβάλλεις και εμένα ταυτόχρονα. Διότι δεν έχεις κάθε δικαίωμα να βρίζεις κάτι που εγώ και όχι μόνο θεωρώ ιερό. Όπως εγώ δεν μπορώ να βρίσω κάτι που θεωρείς εσύ ιερό είτε είναι Ο Θεός είναι είναι ο Αλάχ είτε ο Βούδας είτε η μάνα σου είτε ο Μουζουράκης καβάλα σε Πτεροδάχτυλο playstation 3 (insired and used first from mikieus),  είτε you name it. Το ίδιο ισχύει και για μένα είναι αμφίδρομή η σχέση ΣΕΒΑΣΜΟΥ.

Και στο φινάλε φινάλε, για να γίνει ποιο κατανοητό, αν δεν γουστάρεις Χριστό, Παναγία  δικαίωμα σου, αλλά εξίσου δικαίωμά μου να γουστάρω και να τα θεωρώ ιερά, γκε γκε, γι αυτό ράψτο με ντίζα (used by mikeius first) και μην ξαναβρίσεις. Άντε μπράβο.

Αποκτήστε πρόσβαση σε .mdb (MS Access) βάσεις σε Ubuntu Linux μέσω ODBC

Αν και σπάνιο σενάριο υπάρχουν περιπτώσεις που θέλουμε μέσω ODBC  να έχουμε πρόσβαση σε βάσεις δεδομένων .mdb (γνωστές και σαν βάσεις JET ) που παράγονται μέσω MSAcess ειδικά αν θέλετε να κάνετε migrate από πλατφόρμα Windows σε Linux.

Γι αυτό κατ’ ευθείας στο ψητό ανοίγουμε το καλό μας τερματικό και δίνουμε:


sudo apt-get install libmyodbc
sudo apt-get install odbc-mdbtools

Εφόσον ολοκληρωθεί η εγκατάσταση δίνουμε:


sudo nano /etc/odbcinst.ini

Συνέχεια

Εισαγωγή στο 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.