diff --git a/jetty-start/pom.xml b/jetty-start/pom.xml
index 7c3ccda2b3e..8a08e28e95f 100644
--- a/jetty-start/pom.xml
+++ b/jetty-start/pom.xml
@@ -13,7 +13,30 @@
org.eclipse.jetty.start.*
+
+
+ src/main/resources
+ true
+
+
+
+ org.codehaus.mojo
+ buildnumber-maven-plugin
+
+
+ create-buildnumber
+
+ create
+
+
+ false
+ false
+ ${nonCanonicalRevision}
+
+
+
+
maven-jar-plugin
diff --git a/jetty-start/src/main/java/org/eclipse/jetty/start/Props.java b/jetty-start/src/main/java/org/eclipse/jetty/start/Props.java
index 84a56edfc11..d54bc24800a 100644
--- a/jetty-start/src/main/java/org/eclipse/jetty/start/Props.java
+++ b/jetty-start/src/main/java/org/eclipse/jetty/start/Props.java
@@ -14,7 +14,9 @@
package org.eclipse.jetty.start;
import java.io.IOException;
+import java.io.InputStream;
import java.io.OutputStream;
+import java.net.URL;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
@@ -360,4 +362,32 @@ public final class Props implements Iterable
{
return props.toString();
}
+
+ public static Props load(ClassLoader classLoader, String resourceName)
+ {
+ StartLog.debug("Looking for classloader resource: %s", resourceName);
+ return load(classLoader.getResource(resourceName));
+ }
+
+ public static Props load(URL url)
+ {
+ Props props = new Props();
+ if (url != null)
+ {
+ StartLog.debug("Loading Props: %s", url.toExternalForm());
+ try (InputStream in = url.openStream())
+ {
+ Properties properties = new Properties();
+ properties.load(in);
+ String urlStr = url.toExternalForm();
+ properties.stringPropertyNames().forEach((name) ->
+ props.setProperty(name, properties.getProperty(name), urlStr));
+ }
+ catch (IOException x)
+ {
+ StartLog.debug(x);
+ }
+ }
+ return props;
+ }
}
diff --git a/jetty-start/src/main/java/org/eclipse/jetty/start/StartArgs.java b/jetty-start/src/main/java/org/eclipse/jetty/start/StartArgs.java
index 46b629b14e5..b9d3fb0298d 100644
--- a/jetty-start/src/main/java/org/eclipse/jetty/start/StartArgs.java
+++ b/jetty-start/src/main/java/org/eclipse/jetty/start/StartArgs.java
@@ -16,9 +16,7 @@ package org.eclipse.jetty.start;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
-import java.io.InputStream;
import java.io.OutputStream;
-import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
@@ -35,6 +33,7 @@ import java.util.Map;
import java.util.Properties;
import java.util.Set;
import java.util.StringTokenizer;
+import java.util.jar.Attributes;
import java.util.jar.Manifest;
import java.util.stream.Collectors;
import java.util.stream.StreamSupport;
@@ -55,61 +54,51 @@ public class StartArgs
public static final Set ALL_PARTS = Set.of("java", "opts", "path", "main", "args");
public static final Set ARG_PARTS = Set.of("args");
+ private static final String JETTY_VERSION_KEY = "jetty.version";
+ private static final String JETTY_TAG_NAME_KEY = "jetty.tag.version";
+ private static final String JETTY_BUILDNUM_KEY = "jetty.build";
+
static
{
// Use command line versions
- String ver = System.getProperty("jetty.version", null);
- String tag = System.getProperty("jetty.tag.version", "master");
+ String ver = System.getProperty(JETTY_VERSION_KEY);
+ String tag = System.getProperty(JETTY_TAG_NAME_KEY);
// Use META-INF/MANIFEST.MF versions
if (ver == null)
{
ver = ManifestUtils.getManifest(StartArgs.class)
.map(Manifest::getMainAttributes)
- .filter(attributes -> "Eclipse Jetty Project".equals(attributes.getValue("Implementation-Vendor")))
- .map(attributes -> attributes.getValue("Implementation-Version"))
+ .filter(attributes -> "Eclipse Jetty Project".equals(attributes.getValue(Attributes.Name.IMPLEMENTATION_VENDOR)))
+ .map(attributes -> attributes.getValue(Attributes.Name.IMPLEMENTATION_VERSION))
.orElse(null);
}
- // Use jetty-version.properties values
- if (ver == null)
+ ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
+ // use old jetty-version.properties (as seen within various linux distro repackaging of Jetty)
+ Props jettyVerProps = Props.load(classLoader, "jetty-version.properties");
+ // use build-time properties (included in start.jar) to pull version and buildNumber
+ Props buildProps = Props.load(classLoader, "org/eclipse/jetty/start/build.properties");
+
+ String sha = buildProps.getString("buildNumber", System.getProperty(JETTY_BUILDNUM_KEY));
+ if (Utils.isNotBlank(sha))
{
- URL url = Thread.currentThread().getContextClassLoader().getResource("jetty-version.properties");
- if (url != null)
- {
- try (InputStream in = url.openStream())
- {
- Properties props = new Properties();
- props.load(in);
- ver = props.getProperty("jetty.version");
- }
- catch (IOException x)
- {
- StartLog.debug(x);
- }
- }
+ System.setProperty(JETTY_BUILDNUM_KEY, sha);
}
- // Default values
- if (ver == null)
+ if (Utils.isBlank(ver))
{
- ver = "0.0";
- if (tag == null)
- tag = "master";
- }
- else
- {
- if (tag == null)
- tag = "jetty-" + ver;
+ ver = jettyVerProps.getString("version", buildProps.getString("version", "0.0"));
}
- // Set Tag Defaults
- if (tag.contains("-SNAPSHOT"))
- tag = "master";
+ if (Utils.isBlank(tag))
+ {
+ tag = jettyVerProps.getString("tag", buildProps.getString("tag", "jetty-" + ver));
+ }
VERSION = ver;
- System.setProperty("jetty.version", VERSION);
- System.setProperty("jetty.tag.version", tag);
+ System.setProperty(JETTY_VERSION_KEY, VERSION);
+ System.setProperty(JETTY_TAG_NAME_KEY, tag);
}
private static final String MAIN_CLASS = "org.eclipse.jetty.xml.XmlConfiguration";
@@ -314,8 +303,9 @@ public class StartArgs
System.out.println();
System.out.println("Jetty Environment:");
System.out.println("-----------------");
- dumpProperty("jetty.version");
- dumpProperty("jetty.tag.version");
+ dumpProperty(JETTY_VERSION_KEY);
+ dumpProperty(JETTY_TAG_NAME_KEY);
+ dumpProperty(JETTY_BUILDNUM_KEY);
dumpProperty("jetty.home");
dumpProperty("jetty.base");
diff --git a/jetty-start/src/main/resources/org/eclipse/jetty/start/build.properties b/jetty-start/src/main/resources/org/eclipse/jetty/start/build.properties
new file mode 100644
index 00000000000..c9d20227f6c
--- /dev/null
+++ b/jetty-start/src/main/resources/org/eclipse/jetty/start/build.properties
@@ -0,0 +1,4 @@
+buildNumber=${buildNumber}
+timestamp=${timestamp}
+version=${project.version}
+scmUrl=${project.scm.connection}
\ No newline at end of file