@@ -23,9 +23,9 @@ const libertyVersion = "2.4.1";
2323const jakartaGroupId = "org.eclipse.lsp4jakarta" ;
2424const jakartaJdtArtifactId = "org.eclipse.lsp4jakarta.jdt.core" ;
2525const jakartaLSArtifactId = "org.eclipse.lsp4jakarta.ls" ;
26- const jakartaVersion = "0.2.5 " ;
26+ const jakartaVersion = "0.2.6-SNAPSHOT " ;
2727var lclsReleaseLevel = "releases" ; //snapshots or releases
28- var jakartaReleaseLevel = "releases " ;
28+ var jakartaReleaseLevel = "snapshots " ;
2929
3030const libertyLemminxName = "liberty-langserver-lemminx-" + libertyVersion + "-jar-with-dependencies.jar" ;
3131const libertyLemminxDir = "../liberty-language-server/lemminx-liberty" ;
@@ -95,8 +95,8 @@ gulp.task("downloadLSP4JakartaJars", async function() {
9595 var jakartaLSURL ;
9696
9797 if ( jakartaReleaseLevel === "snapshots" ) {
98- jakartaJDTURL = getEclipseJarURL ( jakartaGroupId , jakartaJdtArtifactId , jakartaVersion , null , true ) ;
99- jakartaLSURL = getEclipseJarURL ( jakartaGroupId , jakartaLSArtifactId , jakartaVersion , "jar-with-dependencies" , true ) ;
98+ jakartaJDTURL = await generateEclipseSnapshotJarURL ( jakartaGroupId , jakartaJdtArtifactId , jakartaVersion , null ) ;
99+ jakartaLSURL = await generateEclipseSnapshotJarURL ( jakartaGroupId , jakartaLSArtifactId , jakartaVersion , "jar-with-dependencies" ) ;
100100 } else {
101101 jakartaJDTURL = getEclipseJarURL ( jakartaGroupId , jakartaJdtArtifactId , jakartaVersion , null , false ) ;
102102 jakartaLSURL = getEclipseJarURL ( jakartaGroupId , jakartaLSArtifactId , jakartaVersion , "jar-with-dependencies" , false ) ;
@@ -158,6 +158,39 @@ function getEclipseJarURL (groupId, artifactId, version, classifier, isSnapshot)
158158 return eclipseJarURL ;
159159}
160160
161+ // Resolve Eclipse snapshot version from maven-metadata.xml
162+ // Example: https://repo.eclipse.org/repository/lsp4jakarta-maven2-snapshots/org/eclipse/lsp4jakarta/org.eclipse.lsp4jakarta.jdt.core/0.2.6-SNAPSHOT/maven-metadata.xml -> 0.2.6-20260526.143326-21
163+ async function resolveEclipseSnapshotVersionFromMetadata ( groupId , artifactId , snapshotVersion , classifier ) {
164+ // Generate maven-metadata.xml URL for Eclipse repository
165+ const metadataURL = `${ ECLIPSE_SNAPSHOT_BASE_URL } /lsp4jakarta-maven2-snapshots/${ groupId . replace ( / \. / g, '/' ) } /${ artifactId } /${ snapshotVersion } /maven-metadata.xml` ;
166+ console . log ( `Fetching maven-metadata.xml: ${ metadataURL } ` ) ;
167+
168+ // Fetch and parse maven-metadata.xml
169+ const response = await axios . get ( metadataURL ) ;
170+ const parser = new XMLParser ( ) ;
171+ const parsedXML = parser . parse ( response . data ) ;
172+
173+ // Get all <snapshotVersion> entries
174+ const versions = parsedXML ?. metadata ?. versioning ?. snapshotVersions . snapshotVersion || [ ] ;
175+
176+ const targetClassifier = classifier || null ;
177+
178+ // Filter entries, only list jar files, match classifier if provided
179+ const snapshotVersionEntry = versions . find ( v => {
180+ const extensionMatch = v . extension === 'jar' ;
181+ const classifierValue = v . classifier || null ;
182+
183+ return extensionMatch && classifierValue === targetClassifier ;
184+ } ) ;
185+
186+ if ( ! snapshotVersionEntry ) {
187+ throw new Error ( `No snapshot JAR found matching parameters: ${ groupId } :${ artifactId } :${ classifier || '(no classifier)' } :${ snapshotVersion } ` ) ;
188+ }
189+
190+ console . log ( `Resolved full snapshot version for ${ artifactId } : ${ snapshotVersionEntry . value } ` ) ;
191+ return snapshotVersionEntry . value ;
192+ }
193+
161194// No API provided to retrieve snapshot artifacts hosted on https://central.sonatype.com/repository/maven-snapshots
162195// Can access maven-metadata.xml using GAV coordinates for artifacts
163196// Will parse retrieved maven-metadata.xml for full artifact version, including timestamp
@@ -194,6 +227,16 @@ async function resolveSnapshotVersionFromMetadata (groupId, artifactId, snapshot
194227 return snapshotVersionEntry . value ;
195228}
196229
230+ // Generate Eclipse repository artifact URL for a SNAPSHOT dependency with provided GAV coordinates
231+ // Example: https://repo.eclipse.org/repository/lsp4jakarta-maven2-snapshots/org/eclipse/lsp4jakarta/org.eclipse.lsp4jakarta.jdt.core/0.2.6-SNAPSHOT/org.eclipse.lsp4jakarta.jdt.core-0.2.6-20260526.143326-21.jar
232+ async function generateEclipseSnapshotJarURL ( groupId , artifactId , snapshotVersion , classifier ) {
233+ const snapshotJarVersion = await resolveEclipseSnapshotVersionFromMetadata ( groupId , artifactId , snapshotVersion , classifier ) ;
234+ const classifierString = classifier ? `-${ classifier } ` : '' ; //Format classifier for URL if defined
235+ const snapshotJarURL = `${ ECLIPSE_SNAPSHOT_BASE_URL } /lsp4jakarta-maven2-snapshots/${ groupId . replace ( / \. / g, '/' ) } /${ artifactId } /${ snapshotVersion } /${ artifactId } -${ snapshotJarVersion } ${ classifierString } .jar` ;
236+ console . log ( `${ groupId } :${ artifactId } :${ snapshotVersion } :${ classifier } URL: ${ snapshotJarURL } ` ) ;
237+ return snapshotJarURL ;
238+ }
239+
197240// Generate Maven Central artifact URL for a SNAPSHOT dependency with provided GAV coordinates
198241// LCLS 2.3.1-SNAPSHOT jar-with-dependencies: <MC_SNAPSHOT_BASE_URL>/io/openliberty/tools/liberty-langserver/2.3.1-SNAPSHOT/liberty-langserver-2.3.1-20250714.163135-2-jar-with-dependencies.jar
199242async function generateSnapshotJarURL ( groupId , artifactId , snapshotVersion , classifier ) {
0 commit comments