What is the good way of setting JAVA_HOME system wide in Linux? /etc/profile or /etc/profile.d/custom.sh?

java-home

Solution

You pretty much answered your own question with the paragraph beginning "For this reason...". The only time I edit `/etc/profile` is when I'm changing some value in it (rather than adding something).

When adding various software packages which require changing user profiles, most distros add an appropriate script to the `/etc/profile.d` directory, and the base-installed `/etc/profile` script has a call to all executable scripts in that directory. (Likewise, upgrading/removing the distro-provided package will have the script in the subdirectory modified or removed.)

Problem

There doesn't seem to be an official answer as to where to set your system wide JAVA_HOME in Linux, at least I haven't found one (looked on Oracle website and some google fu). Many forums and comments point at setting it in /etc/profile or even /etc/bashrc/ (or /etc/bashrc.bashrc) but on my system both these files headers are quite specific about creating "a custom.sh shell script in /etc/profile.d/ [...] as this will prevent the need for merging in future updates." instead of directly modifying the files. For this reason I'm thinking the custom.sh shell script placed in /etc/profile.d is the way to go but I might be missing something hence this question =) Please forgive me if I missed an official doc and just post the link!

Original source