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 μπορεί να κατασταλεί.