user222423
user222423

Reputation: 21

Using Java environment variables to point to alternate Java folder

My company's software utilizes Java Access bridge to function correctly.

We found that every time that Java updates itself, we have to once again re-install the Access Bridge components.

Is there a way to use an environment variable to point to either the Java Access Bridge or Java JRE to a folder that I can protect from getting updated?

Upvotes: 1

Views: 520

Answers (2)

user222423
user222423

Reputation: 21

This is the batch file we went with:

@echo on
cd /d %~dp0

rem case sensitive jre - finds juice Java folder and puts to temp.txt into temp folder 
:CHKFLEX
set temp1=%LOCALAPPDATA%\Juice\Flex
dir /AD /b %temp1% | find "jre" > %temp%\temp.txt

rem didnt find the jre folder in juice
if %errorlevel% NEQ 0 goto notfound

rem create environment variable to path found and written to temp.txt
for /f "delims=" %%x in (%temp%\temp.txt) do set temp2=%%x

rem path to juice subfolder created
set temp1
set temp2
set "_prog=%temp1%\%temp2%"

rem copy if files aren't there already
:x86
Set JAVAHOME32=%_prog%
@echo on
if exist "%JAVAHOME32%\bin\JavaAccessBridge-32.dll" goto theend
copy WindowsAccessBridge-32.dll    %WINDIR%\SYSTEM32
copy JavaAccessBridge-32.dll       %JAVAHOME32%\bin
copy JAWTAccessBridge-32.dll       %JAVAHOME32%\bin
copy accessibility.properties   %JAVAHOME32%\lib
copy access-bridge-32.jar       %JAVAHOME32%\lib\ext
copy jaccess.jar          %JAVAHOME32%\lib\ext

goto theend

rem Juice JRE folder not found
:notfound
echo "Alternate JRE folder not found..."

:theend
pause

Although we did have a more advanced batch file that can copy to both the Juice folder and to the Java folder by checking the registry for the java home path. Here is that one:

@echo on
cd /d %~dp0

:REGVAL
FOR /F "skip=2 tokens=2*" %%A IN ('REG QUERY "HKLM\Software\JavaSoft\Java Runtime     Environment" /v CurrentVersion') DO set CurVer=%%B
FOR /F "skip=2 tokens=2*" %%A IN ('REG QUERY "HKLM\Software\JavaSoft\Java Runtime Environment\% CurVer%" /v JavaHome') DO set JAVA_HOME=%%B
Set JAVA_HOME

:CHKFLEX
set temp1=%LOCALAPPDATA%\Juice\Flex
dir /AD /b %temp1% | find "JRE" > %temp%\temp.txt

if %errorlevel% NEQ 0 goto notfound

for /f "delims=" %%x in (%temp%\temp.txt) do set temp2=%%x

set temp1
set temp2
set "_prog=%temp1%\%temp2%"

pause

if not exist "%systemdrive%\Program Files (x86)" (
    goto x86
) else (
    goto x64
)

:x86
Set JAVAHOME32=%_prog%
@echo on
if exist "%JAVAHOME32%\bin\JavaAccessBridge-32.dll" goto x86_next
copy WindowsAccessBridge-32.dll    %WINDIR%\SYSTEM32
copy JavaAccessBridge-32.dll       %JAVAHOME32%\bin
copy JAWTAccessBridge-32.dll       %JAVAHOME32%\bin
copy accessibility.properties   %JAVAHOME32%\lib
copy access-bridge-32.jar       %JAVAHOME32%\lib\ext
copy jaccess.jar          %JAVAHOME32%\lib\ext

:x86_next
if exist "%JAVA_HOME%\bin\JavaAccessBridge-32.dll" goto theend
copy JavaAccessBridge-32.dll %JAVA_HOME%\bin
copy JAWTAccessBridge-32.dll %JAVA_HOME%\bin
copy accessibility.properties %JAVA_HOME%\lib
copy access-bridge-32.jar %JAVA_HOME%\lib\ext
copy jaccess.jar          %JAVA_HOME%\lib\ext

goto theend


:x64
Set JAVAHOME32=%_prog%
Set JAVAHOME64=%_prog%
@echo on
if exist "%JAVAHOME64%\bin\JavaAccessBridge-64.dll" goto x64_next
copy WindowsAccessBridge-32.dll %WINDIR%\SYSWOW64
copy WindowsAccessBridge-64.dll %WINDIR%\SYSTEM32
copy JavaAccessBridge-64.dll    %JAVAHOME64%\bin
copy JAWTAccessBridge-64.dll    %JAVAHOME64%\bin
copy accessibility.properties   %JAVAHOME32%\lib 
copy access-bridge-64.jar       %JAVAHOME64%\lib\ext
copy jaccess.jar %JAVAHOME64%\lib\ext

:x64_next
if exist "%JAVA_HOME%\bin\JavaAccessBridge-64.dll" goto theend
copy JavaAccessBridge-64.dll    %JAVA_HOME%\bin
copy JAWTAccessBridge-64.dll    %JAVA_HOME%\bin
copy accessibility.properties   %JAVA_HOME%\lib
copy access-bridge-64.jar       %JAVA_HOME%\lib\ext
copy jaccess.jar %JAVA_HOME%\lib\ext
goto theend

:notfound
  echo "not found..."

FOR /F "skip=2 tokens=2*" %%A IN ('REG QUERY "HKLM\Software\JavaSoft\Java Runtime Environment" /v CurrentVersion') DO set CurVer=%%B
FOR /F "skip=2 tokens=2*" %%A IN ('REG QUERY "HKLM\Software\JavaSoft\Java Runtime Environment\%CurVer%" /v JavaHome') DO set JAVA_HOME=%%B

set CurVer
Set _prog=%JAVA_HOME%
set _prog

if not exist "%systemdrive%\Program Files (x86)" (
    goto x86
) else (
   goto x64
)


:theend

Upvotes: 0

Bull
Bull

Reputation: 11941

When you update Java it installs it in a new folder and %JAVAHOME% changes. JAVAHOME on my systems is set to C:\Program Files\Java\jdk1.7.0_13 and when I update that 13 is going to change to a 14.

Now the problem is that when you install Java Access Bridge files get copied into varies folders including %JAVAHOME%. So when you update Java the new Java home folder doesn't have the Java Access Bridge components.

There is really nothing you can do except reinstall Java Access Bridge.

See the installation doco at http://docs.oracle.com/javase/accessbridge/2.0.2/setup.htm#installing-jab-64-bit.

Upvotes: 0

Related Questions