Generic Java Builds
This chapter talks about basic build steps in Java such as invoking javac
and using spec macros like build-claspath
and build-jar-repository
.
Generating Application Shell Scripts
As mentioned in section about Java packaging basics, all Java applications need wrapper shell scripts to setup the environment before running JVM and associated Java code.
The javapackages-tools
package contains a convenience %jpackage_script
macro that can be used to create scripts that work for the majority of packages.
See its definition and documentation in /usr/lib/rpm/macros.d/macros.jpackage
.
One thing to pay attention to is the 6th argument to it - whether to prefer a JRE over a full SDK when looking up a JVM to invoke.
Most packages that do not require the full Java SDK will want to set that to true
to avoid unexpected results when looking up a JVM when some of the installed JREs do not have the corresponding SDK (*-devel
package) installed.
%install
...
%jpackage_script msv.textui.Driver "" "" msv-msv:msv-xsdlib:relaxngDatatype:isorelax msv true
...
The previous example installs the msv
script (5th argument) with main class being msv.textui.Driver
(1st argument).
No optional flags (2nd argument) or options (3rd argument) are used.
This script will add several libraries to classpath before executing main class (4th argument, JAR files separated with :
).
build-classpath
is run on every part of 4th argument to create full classpaths.
Replacing JARs with symlinks using xmvn-subst
Sometimes it may be needed to replace all JAR files in current directory with symlinks to the system JARs located in %{_javadir}
.
This task can be achieved using tool called xmvn-subst
.
$ ls -l
-rw-r--r--. 1 msrb msrb 40817 Oct 22 09:16 cli.jar
-rw-r--r--. 1 msrb msrb 289983 Oct 22 09:17 junit4.jar
-rw-r--r--. 1 msrb msrb 474276 Oct 22 09:14 log4j.jar
$ xmvn-subst .
[INFO] Linked ./cli.jar to /usr/share/java/commons-cli.jar
[INFO] Linked ./log4j.jar to /usr/share/java/log4j.jar
[INFO] Linked ./junit4.jar to /usr/share/java/junit.jar
$ ls -la
lrwxrwxrwx. 1 msrb msrb 22 Oct 22 10:08 cli.jar -> /usr/share/java/commons-cli.jar
lrwxrwxrwx. 1 msrb msrb 22 Oct 22 10:08 junit4.jar -> /usr/share/java/junit.jar
lrwxrwxrwx. 1 msrb msrb 22 Oct 22 10:08 log4j.jar -> /usr/share/java/log4j.jar
The example above shows how easy the symlinking can be. However, there are some limitations.
Original JAR files need to carry metadata which tell xmvn-subst
for what artifact given file should be substituted.
Otherwise xmvn-subst
won’t be able to identify the Maven artifact from JAR file.
See |
Want to help? Learn how to contribute to Fedora Docs ›