openSUSE:Packaging Java
Οδηγός για το Build Service · Κόλπα & Έξυπνες λύσεις · Οδηγός Ανεξαρτήτου Διανομής · Έλεγχοι πακεταρίσματος
Κατηγορίες μενού επιφάνειας εργασίας · Μακροεντολές RPM · Έτοιμοι κώδικες σεναρίων · Σενάρια εκκίνησης
Περιεχόμενα
(Build)Requires
Η Java συχνά χωρίζεται στα JRE - Java Runtime Environment και JDK - Java development kit. Το πρώτο περιέχει την εντολή java
και απαιτείται για την εκτέλεση των εφαρμογών Java. Στο SUSE το JRE παρέχεται από το πακέτο java-1_6_0-%{origin}
, όπου origin αντικαθίσταται από sun, openjdk (και ibm ή bea για τα προϊόντα SLES). Το JDK βρίσκεται στο java-1_6_0-%{origin}-devel
.
Μιας και όλες οι εκδόσεις είναι συμβατές (ειδικά η sun και η openjdk), δεν έχει σημασία ποια χρησιμοποιείτε. Η καλύτερη πρακτική είναι να μην απαιτείτε συγκεκριμένο προμηθευτή, αλλά να χρησιμοποιείτε τα κοινά σύμβολα που ορίζονται στο έργο http://jpackage.org .
- Τα
java
, ήjre
είναι σύμβολα που χρησιμοποιούνται για την εξάρτηση στο JRE κατά το χρόνο εκτέλεσης. Αν χρειάζεται να ορίσετε την ελάχιστη έκδοση, το κάνετε με>= 1.6.0
- Το
java-devel
είναι ένα σύμβολο για το JDK και επεκτείνεται στο openjdk στις περισσότερες περιπτώσεις. Αυτό μπορεί να αλλάξει στο prjconf του έργου με τη χρήση τουPrefer: java-1_6_0-sun -java-1_6_0-openjdk
Εκδόσεις Java
Sun Java
Η Sun Java δεν είναι διαθέσιμη στο προκαθορισμένο αποθετήριο, έτσι πρέπει να προσθέσετε το αποθετήριο NonFree, το οποίο περιέχει το Sun JDK. Απλά πληκτρολογήστε
osc meta prj [your project] -e
και προσθέστε το αποθετήριο
<repository name="openSUSE_11.3"> <path project="openSUSE:11.3" repository="standard"/> <!-- the NonFree repository --> <path project="openSUSE:11.3:NonFree" repository="standard"/> ...
Αποθετήρια Java
- Java:packages - ένα έργο ανάπτυξης για όλα τα πακέτα Java, μπορείτε να βρείτε εδώ τις πιο πρόσφατες εκδόσεις για το Factory
- Java:openjdk6:Factory - έργο ανάπτυξης για το openjdk
- Java:jpackage-1.7 - Η μεταφορά από τη SUSE του έργου http://jpackage.org/
- Java:jpackage-5.0 - Η μεταφορά από τη SUSE του έργου http://jpackage.org/
- Java:jpackage-6.0 - Η μεταφορά από τη SUSE του έργου http://jpackage.org/
Παραδείγματα
Μια αυτόνομη εφαρμογή
Ως παράδειγμα, θα χρησιμοποιήσουμε το "columba", ένα πελάτη ηλεκτρονικού ταχυδρομείου που είναι γραμμένος πλήρως σε Java. Ένα παράδειγμα αρχείου spec-file μπορείτε να δείτε παρακάτω.
columba.spec
Name: columba Summary: eMail client written in Java Version: 1.4 Release: 1 License: GNU General Public License (GPL) Group: Productivity/Networking/Email/Clients Source: http://prdownloads.sourceforge.net/columba/columba-%{version}-src.zip URL: http://www.columbamail.org BuildRoot: %{_tmppath}/%{name}-%{version}-build BuildRequires:unzip BuildRequires:update-alternatives java-1_5_0-sun-devel BuildRequires:ant Requires: java >= 1.5.0 BuildArchitectures: noarch %description Columba is an Email Client written in Java, featuring a user-friendly graphical interface with wizards and internationalization support. Its a powerful email management tool with features to enhance your productivity and communication. So, take control of your email before it takes control of you! Feature Highlights * Clean and Response User Interface * Cross Platform * Internationalization * Unlimited Functionality using Plugins * Safe and Secure * Glueing together Third-Party Tools * Multiple Accounts and Profiles %prep %setup -q -n "columba-%{version}-src" # remove the third party jars find . -iname '*.jar' | xargs rm -rf %build %ant jar %install # jars %__install -d -m 0755 "%{buildroot}%{_datadir}/%{name}" %__install -m 0644 columba.jar "%{buildroot}%{_datadir}/%{name}/" # lib #%__install -d -m 0755 "%{buildroot}{_datadir}/%{name}/lib/jpa" #%__install -m 0755 lib/jpa/* "%{buildroot}%{_datadir}/%{name}/lib/" %__cp -rp lib "%{buildroot}%{_datadir}/%{name}/" %__install -d -m 0755 "%{buildroot}%{_datadir}/%{name}/native" %__cp -rp native/linux "%{buildroot}%{_datadir}/%{name}/native/" %__install -d -m 0755 "%{buildroot}%{_datadir}/%{name}/plugins" %__cp -rp plugins/* "%{buildroot}%{_datadir}/%{name}/plugins/" # startscript %__install -d -m 0755 "%{buildroot}%{_bindir}" cat > "%{buildroot}%{_bindir}/%{name}" << EOF #!/bin/sh exec java -jar %{_datadir}/%{name}/%{name}.jar EOF %__chmod 0755 "%{buildroot}%{_bindir}/%{name}" %clean %__rm -rf "%{buildroot}" %files %defattr(-, root, root) %doc AUTHORS CHANGES LICENSE README %{_bindir}/%{name} %{_datadir}/%{name} %changelog * Wed Nov 14 2007 - PACKAGERNAME@opensuse.org - initial RPM for columba on openSUSE
Μια βιβλιοθήκη Java
Το columba ήταν μια αυτόνομη εφαρμογή. Για το πακετάρισμα των βιβλιοθηκών, υπάρχουν ορισμένες διαφορές. Ο ακόλουθος σκελετός για τις βιβλιοθήκες Java προέρχεται από τα αρχεία spec του jpackage.org. Υπάρχουν ορισμένες ειδικές μακροεντολές όπως η %{_javadir}
– για λεπτομέρειες δείτε το openSUSE:Java_RPM_Macros. Τα σενάρια από το jpackage-utils που χρησιμοποιούνται για την κατασκευή (και εκτέλεση) περιγράφονται στο openSUSE:Java_jpackage-utils.
### the skeleton for packaging of the java libraries ### many of these techniques are based on approach of jpackage.org spec files Name: Version: Release: Summary: Group: Development/Libraries/Java License: URL: Source: BuildRoot: %{_tmppath}/%{name}-%{version}-build BuildArchitectures: noarch BuildRequires: java-devel BuildRequires: ant BuildRequires: jpackage-utils %description ### Many of Java packages contains a javadoc and this is universal notation ### usefull for majority of Java packages %package javadoc Summary: Javadoc for %{name} Group: Development/Libraries/Javam %description javadoc This package contains a javadoc. %prep %setup -q # remove all third party jars find . -iname '*.jar' | xargs rm -rf ### Many of Java software comes from Windows, so this sed edit the files with ### Windows encoding - the shell scripts probably not works with the Windows end of lines! #sed -i -e 's/.$//' %build ### Sometimes is necessary to set the CLASSPATH before build ### build-classpath is a standard tool from jpackage-utils #export CLASSPATH=$(build-classpath foo) %{ant} %install ### create of the directory for installing the jars %{__install} -d -m 755 %{buildroot}%{_javadir} # jars ### make name of jars version agnostics (cd %{buildroot}%{_javadir}/%{name} && for jar in *-%{version}*; do ln -sf ${jar} ${jar/-%{version}/}; done) # javadoc %{__install} -d -m 755 %{buildroot}/%{_javadocdir}/%{name}-%{version} %{__cp} -pr api/* %{buildroot}%{_javadocdir}/%{name}-%{version} %clean %{__rm} -rf %{buildroot} %files %defattr(-,root,root,0755) %{_javadir}/%{name}*.jar %files javadoc %defattr(-,root,root) %{_javadocdir}/%{name}-%{version} %changelog
Αρχεία jar τρίτων
Το Java upstream συμπεριλαμβάνει βιβλιοθήκες ως jars στις πηγαίες αρχειοθήκες. Αυτή η προσέγγιση έχει το σκοπό της για τους προγραμματιστές, που τείνουν να κατασκευάζουν στα γρήγορα τα έργα τους χωρίς την ανάγκη να κατέβουν/ή να μεταγλωττιστούν όλα τα αρχεία εξαρτήσεων. Λόγω της ανεξαρτησίας της πλατφόρμας δεν υπάρχει πρόβλημα στη χρήση των δυαδικών jars. Αλλά δεν είναι και πολύ χρήσιμο στους συντηρητές των πακέτων και η συνήθη προσέγγιση σε διανομές Linux είναι χρήση των jars του συστήματος (ευρέως τοποθετημένα στο /usr/share/java) για την κατασκευή και για το χρόνο-εκτέλεσης. Υπάρχουν ορισμένες ειδικές περιπτώσεις (πχ. υπογεγραμμένα jars) που δεν είναι δυνατή η κατασκευή του δικού σας jar, αλλά γενικά, δεν υπάρχει λόγος να χρησιμοποιούνται τα δυαδικά τρίτων.
Η συμπερίληψη εξωτερικών δυαδικών είναι κακή γιατί:
- Είναι άχρηστα σε όσους εμπιστεύονται μόνο λογισμικό κατασκευασμένο από αυτούς.
- Είναι άχρηστα σε όσους τα έχουν ήδη αυτά τα δυαδικά.
- Καθιστά την ιχνηλάτηση των εξαρτήσεων εφιάλτη.
- Καθιστά μεγαλύτερες τις αρχειοθήκες.
(από το [jpackage.org:Αίτημα στους προγραμματιστές Java]
Αντιμετώπιση προβλημάτων
Σφάλμα στην έκδοση του bytecode
Αν λάβατε ένα σφάλμα
ERROR: the files above contain java bytecode for something later than java 1.5, ERROR: please set the javac target to 1.5 or lower
μπορείτε να ορίσετε ένα στόχο στην 1.5
-Dant.build.javac.source=1.5 -Dant.build.javac.target=1.5
Για το maven:
mvn-jpp -Dmaven.compile.target=1.5 -Dmaven.javadoc.source=1.5 ...
ή καταστείλετε αυτό τον έλεγχο με το
export NO_BRP_CHECK_BYTECODE_VERSION=true
στο τμήμα του %install
. Αυτός ο έλεγχος είναι απαραίτητος για το SLE αλλά για πακέτα στο Build Service μπορεί να κατασταλεί.