Knowledge base / Microblog about software development related things by Hans-Peter Störr
Created 28-03-2024, last change 09-07-2024
Sometimes you want all JARs that are in a server to be available in your IDE - e.g. if you want to test or debugsome
code that uses deployed code but like to run it outside of the server itself. Here is a script that
creates a pom.xml
with all JARs of a server in it. You might need to adjust it to your needs.
Here is a script GenerateServerPom.groovy
to be run with command line groovy in the top directory of the server.
import java.util.zip.ZipEntry
import java.util.zip.ZipFile
File topfile = new File("sling").canonicalFile
if (!topfile.exists()) {
topfile = new File("launcher").canonicalFile
}
if (!topfile.exists()) {
topfile = new File("crx-quickstart").canonicalFile
}
def pom = new FileWriter("pom.xml")
pom.append("""<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>hps.launchpaddeps</groupId>
<artifactId>launchpadaem</artifactId>
<version>0.0.0-SNAPSHOT</version>
<!-- Generated by GenerateFelixPom.groovy. -->
<properties>
<source.encoding>UTF-8</source.encoding>
<java.source>1.8</java.source>
<java.target>1.8</java.target>
</properties>
<dependencies>
""")
List<String> entries = new ArrayList<String>();
topfile.traverse(nameFilter: ~/.*\.jar/) { File jarfile ->
def jar = new ZipFile(jarfile)
String pomentry = ""
jar.entries().find { ZipEntry entry -> entry.name.endsWith("/pom.properties") && entry.name.contains("META-INF/maven") }.each {
Properties props = new Properties()
props.load(jar.getInputStream(it))
def version = props.getProperty("version")
def group = props.getProperty("groupId")
def artifact = props.getProperty("artifactId")
String absolutepath = jarfile.canonicalPath
pomentry = pomentry + """
<dependency>
<groupId>$group</groupId>
<artifactId>$artifact</artifactId>
<version>$version</version>
<scope>system</scope>
<systemPath>$absolutepath</systemPath>
</dependency>
"""
}
if (pomentry == "") {
def artifact = jarfile.name.replaceAll(~/[^a-zA-Z0-9]/, "_")
String relativepath = jarfile.canonicalPath.substring(topfile.parentFile.path.length())
String absolutepath = jarfile.canonicalPath
pomentry = """
<dependency>
<groupId>hps.launchpaddeps</groupId>
<artifactId>$artifact</artifactId>
<version>0.0.0-SNAPSHOT</version>
<scope>system</scope>
<systemPath>$absolutepath</systemPath>
</dependency>
"""
}
// println(pomentry)
entries.add(pomentry)
pomentry = ""
jar.close()
}
Collections.sort(entries)
for(item in entries){
pom.append(item)
}
pom.append("""
</dependencies>
</project>
""")
pom.close()
println("Wrote pom.xml")