Development/Java
TDF LibreOffice Document Liberation Project Community Blogs Weblate Nextcloud Redmine Ask LibreOffice Donate
LibreOffice contains various pieces of code written in Java. Some of these pieces are currently being replaced/rewritten, but it is likely that LibreOffice will contain Java code for quite some time.
What pieces of LibreOffice are written in Java?
Some basic GNU/Linux tools can be run over the source code to report on various aspects relating to Java usage. Each example command below has been run against an extracted copy of the v4.2.6.3 archived (tar/7z) source tree.
Which directories contain *.java files?
You can count the number of *.java
files this way:
git ls-files *.java|awk -F/ {'print $1'}|uniq -c|sort -bg
This is the preliminary result, counting each and every folder of LibreOffice core source code:
1 chart2
1 cli_ure
1 comphelper
1 cppuhelper
1 jurt
1 jvmaccess
1 jvmfwk
1 sw
1 unoxml
1 xmlsecurity
2 bridges
2 codemaker
2 linguistic
3 reportdesign
3 smoketest
3 stoc
4 filter
4 sot
6 ure
7 sc
8 extensions
8 svl
9 desktop
9 testtools
10 unotest
11 embeddedobj
12 javaunohelper
12 sfx2
12 swext
16 ucb
17 dbaccess
24 bean
31 framework
33 connectivity
35 forms
38 nlpsolver
48 package
57 scripting
63 toolkit
96 android
116 wizards
129 ridljar
159 reportbuilder
232 odk
1226 qadevOOo
Note that very little of this Java code is actually part of the shipped product. Most of these lines of code are actually only test code from the $MODULE/qa
and $MODULE/test
subdirectories. A more relevant analysis would exclude those subdirectories as they are never shipped with the product.
git ls-files *.java|grep -Ev '\/qa\/|\/test\/'|awk -F/ {'print $1'}|uniq -c|sort -bg
The list then becomes:
1 jurt
1 jvmaccess
1 jvmfwk
1 xmlsecurity
2 bridges # modules that provide the bridge to Java itself -- little to no LO core functionality by itself
3 smoketest
6 ure
7 testtools
9 connectivity # remaining core functionality -- mostly hsqldb 1.8 driver for LO Base default database (~3 KLOC)
12 swext
19 bean # extensions and scripting -- little to no LO core functionality by itself
38 nlpsolver
57 scripting
96 android # android port -- not part of the core product
102 ridljar
116 wizards # seems to be dead code only really by now
159 reportbuilder
230 odk
1225 qadevOOo # various forms of integration tests -- little to no LO core functionality by itself
For a comprehensive list of directories:
git ls-files *.java|sed 's/[^/]*.java$//'|uniq -c|sort -bg
Output (last 10 lines) from the above sed
/sort
commands, using tail
, which shows the top 10 directories with the most .java
files is:
35 android/source/src/java/org/mozilla/gecko/gfx/
37 package/qa/storages/
41 qadevOOo/tests/java/mod/_forms/
43 qadevOOo/tests/java/mod/_sc/
45 toolkit/test/accessibility/
49 qadevOOo/tests/java/ifc/drawing/
58 qadevOOo/tests/java/ifc/awt/
68 qadevOOo/tests/java/ifc/text/
73 qadevOOo/tests/java/mod/_toolkit/
74 qadevOOo/tests/java/mod/_sw/
For the complete list, please see Development/Java/Directories containing .java files
How many lines of java source code in each main directory?
It is worth using cloc
to count the lines of code easily:
for i in $(git ls-files *.java|awk -F/ {'print $1'}|uniq);
do
cloc --quiet --include-lang=Java $i|grep Java|awk -v i=$i '{print $5"\t"i}';
done | sort -bg
Output from above grep/sed commands, after sorted by the number of lines:
28 jvmfwk
45 jurt
50 jvmaccess
59 cli_ure
71 sw
98 stoc
120 smoketest
137 xmlsecurity
143 ure
175 sot
201 bridges
239 cppuhelper
275 linguistic
346 reportdesign
370 comphelper
430 svl
519 unotest
579 codemaker
622 desktop
684 filter
719 chart2
769 extensions
1126 ucb
1653 testtools
1743 sc
1817 unoxml
2099 embeddedobj
2133 sfx2
2373 nlpsolver
2913 dbaccess
2924 javaunohelper
3035 bean
3075 connectivity
3233 swext
4285 forms
5207 framework
7874 scripting
8525 toolkit
9158 package
12114 android
14644 reportbuilder
15071 ridljar
27332 wizards
34584 odk
86454 qadevOOo
Total number of lines is reported with this command, which outputs ~260K LOC at the moment.
cloc --quiet --include-lang=Java `git ls-files *.java|awk -F/ {'print $1'}|uniq`
Java use (as a percentage) in each LibreOffice end-of-train release, is also available in the Ask thread Is there any plan to ditch Java in the future and use only C/C++ code?. Note though that very little of this Java code is actually part of the shipped product. Most of these lines of code are actually only testcode from the $MODULE/qa subdirectory. A more relevant analysis would exclude that subdirectories as they are never shipped with the product.
Which directories contain *.jar files?
find -type f -name "*.jar"
Output from above find/sort commands contains > 170 files at the moment. These are files from all over the code base, generated files in instdir/
and also external/
.
These are the *.jar
files, only from the source tree itself:
git ls-files *.jar
The output contains only 3 files:
android/source/gradle/wrapper/gradle-wrapper.jar
qadevOOo/testdocs/qadevlibs/JobExecutor.jar
qadevOOo/testdocs/qadevlibs/MyPersistObjectImpl.jar
Building LibreOffice without Java
Compile LibreOffice with the flag --without-java
Suggestion to Remove Java Components
Some think java is a slow memory hog, others think it is a legal swamp that invites lawsuits. Neither might be true, but some developers have nevertheless expressed their desire to remove Java usage in LO over time.
Resources
- See an overview of all code in LO on page Development/Code Overview.
- Also see https://docs.libreoffice.org