UNPKG

temurin-jdk-downloader

Version:

Utilities for downloading, extracting, and finding Eclipse Adoptium (Temurin) OpenJDK binary releases for Windows.

188 lines (119 loc) 4.72 kB
# temurin-jdk-downloader A Node.js utility library for **downloading, extracting, and auto-discovering Eclipse Adoptium Temurin (OpenJDK) binary releases** from GitHub. Supports robust file downloading (with progress and timeouts), ZIP extraction, and Java executable detection for Windows systems. --- ## Features - **Automatic download** of the latest matching Temurin (OpenJDK) Windows ZIP distribution (e.g., 8, 11, 17, 21, 25, and more). - **Progress-aware file download** (with timeout, error handling, and redirect support). - **In-memory ZIP extraction** with full folder structure preserved. - **Auto-detects `java.exe` path** (for setting `JAVA_HOME` in CI or local setup). - Simple async APIs and no binary dependencies. --- ## Installation ```sh npm install temurin-jdk-downloader ``` > **Note:** This package is intended for use in Windows environments and downloads x64 Windows JDK zip archives. --- ## Usage ### Download and Install OpenJDK with Auto-Detection ```js const { downloadTemurinJDK } = require('temurin-jdk-downloader'); (async () => { // Download and extract Temurin JDK 21 to the specified folder const { version, javaPath, binPath } = await downloadTemurinJDK({ version: 21, targetExtractDir: 'C:/jdk-installs', }); console.log(`JDK Version: ${version}`); console.log(`java.exe Path: ${javaPath}`); console.log(`bin Path: ${binPath}`); })(); ``` - Installs into: `C:/jdk-installs/temurin21-binaries` - Finds `bin/java.exe` automatically. --- ### Download a File with Progress ```js const { downloadFile } = require('temurin-jdk-downloader'); await downloadFile( 'https://example.com/file.zip', 'C:/temp/file.zip', { timeout: 60000, onProgress: (percent, downloadedBytes, totalBytes) => console.log(percent + '%'), } ); ``` --- ### Extract a ZIP Archive ```js const { extractZip } = require('temurin-jdk-downloader'); await extractZip('C:/temp/openjdk.zip', 'C:/jdk-unpacked'); ``` --- ### Find a Java Executable ```js const { findJavaExe } = require('temurin-jdk-downloader'); const javaPath = findJavaExe('C:/jdk-installs/temurin21-binaries'); ``` --- ### Lookup Direct Download URL for a JDK (Advanced) ```js const { getTemurinBinaryURL } = require('temurin-jdk-downloader'); const url = await getTemurinBinaryURL('temurin17-binaries'); console.log(url); // -> https://github.com/adoptium/temurin17-binaries/... ``` --- ## API Reference ### `downloadTemurinJDK({ version, targetExtractDir })` Download, extract, and auto-discover the JDK for the given version. - `version` (`number`): Desired OpenJDK major version (defaults to `25` if omitted). - `targetExtractDir` (`string`): Directory where the JDK archive will be extracted. **Returns**: `Promise<{ version: string|null, javaPath: string, binPath: string }>` Throws on unsupported versions or failures. --- ### `downloadFile(url, destPath, [options])` Robust downloader for HTTP/HTTPS files, with progress and timeout support. - `url` (`string`): URL to download. - `destPath` (`string`): Local file path to save. - `options` (`object`): - `timeout` (`number`): Optional timeout in ms (default: 120000 = 2min). - `onProgress` (`function`): Optional callback: `(percent, downloadedBytes, totalBytes) => {}` **Returns**: `Promise<void>` --- ### `extractZip(zipPath, extractTo)` Extracts all files from a ZIP archive. - `zipPath` (`string`): Path to ZIP file. - `extractTo` (`string`): Output directory. **Returns**: `Promise<void>` --- ### `findJavaExe(baseDir)` Finds a `java.exe` inside the extracted JDK directory. - `baseDir` (`string`): Path to the main JDK root folder. **Returns**: `string|null` (absolute path to java.exe if found) --- ### `getTemurinBinaryURL(temurinBinary)` Resolves the download URL of the latest Windows ZIP from GitHub. - `temurinBinary` (`string`): e.g. `'temurin21-binaries'` **Returns**: `Promise<string|undefined>` --- ## Supported JDK Versions - 8, 11, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25 --- ## Limitations - **Windows only**: Downloads Windows x64 Hotspot OpenJDK binaries (`.zip`). - Scrapes GitHub releases for latest builds (subject to website structure changes). - Does **not** install system-wide or set environment variables—this is just extraction and discovery. - Requires Node.js >= 14. --- ## License MIT --- ## Credits - [Eclipse Adoptium](https://adoptium.net/) for OpenJDK builds - Inspired by CI/CD automation use cases --- **Pull requests and improvements are welcome!**