Use this page to discuss Java support.
Multi-Step Java Builder patch and build example: http://scons.tigris.org/issues/show_bug.cgi?id=1162 by LeanidNazdrynau
This is another Java-Build-Run-Code. Builds Java files with classpath containing any directory within the project, recursively parses the classpath directory to include all files .class and .jar files, within it. Can compile a single file or complete src directory. Runs, class files, with the same classpath principle. Easy to change and modify, by BabarAbbas.
This is first implementation of multi-step Java builder. It re-defines next builders: Jar, JavaH, Java, JavaDir, JavaFile, where
- Jar has src_builder=Java
- JavaH has src_builder=Java
Java has src_builder=JavaFile (but I am not using it now)
JavaDir - build all java in directories (what current Java builder does), I just could not mixed together Java, which takes files as source and JavaDir, which takes directories as source in one builder declaration. I hope this builder can be combine with Java later on. They do use the same functions in javac.py tool.
What you can do with it:
With Multi-step builders you can simply define build Jar file and specify .java. Or you can add swig.py builder to it and use .i as input to Jar builder, like:
- Jar(['Sample.i','A.java'])
In this call swig builder will build .java from .i files and send it to Java builder, which will build .class files and send them to Jar builder, which will generate .jar file all in one call, so your Java can work similar as C/C++ builds.
From patch above download java build example: project.zip file. This example tested on Windows with BuildDir set and duplicate=0. You have to have JDK and swig in your path.
Example demostrate:
- src/HelloApplet - build jar file from directory and pottentially sign it.
#this is regulat Java build for scons
import os
Import ("env")
denv=env.Copy()
classes=denv.JavaDir(target='classes',source=['com'])
#set correct path for jar
denv['JARCHDIR']=os.path.join(denv.Dir('.').get_abspath(),'classes')
denv.Jar('HelloApplet',classes)src/server - build classes from Java directories and create .war file, which includes built class files, WEB-INF and built HelloApplet.jar
import os
Import ("env")
classes=env.JavaDir(target='classes',source=['com'])
env['WARXFILES']=['SConscript','.cvsignore']
env['WARXDIRS']=['CVS']
env.War('scons',[classes,Dir('../WebContent'),'#/buildout/HelloApplet/HelloApplet.jar'])- src/jni - JNI interface. Will build Shared library and Jar file, Will use swig to generate interface Java and C++ files. Deactivate build in this directory if you do not have swig installed.
Import ("env")
denv=env.Copy()
denv.Append(SWIGFLAGS=['-java'])
denv.SharedLibrary('scons',['JniWrapper.cc','Sample.i'])
denv['JARCHDIR']=denv.Dir('.').get_abspath()
denv.Jar(['Sample.i','A.java'])- src/javah - JNI. Will build shared library and Jar file. Will use JavaH to generate C++ header files.
Import('env')
denv=env.Copy()
denv['JARCHDIR']=denv.Dir('.').get_abspath()
denv.Jar('myid','MyID.java')
denv.JavaH(denv.Dir('.').get_abspath(),'MyID.java')
denv.SharedLibrary('myid','MyID.cc')