### Elasticsearch Version

8.2

### Installed Plugins

_No response_

### Java Version

_bundled_

### OS Version

Any

### Problem Description

The PluginInfo verification code in Elasticsearch ensures that plugins must match the Elasticsearch they are being installed into. However, if the plugin descriptor properties file contains an empty string, the Version.fromString call would simply return the latest Elasticsearch version.

The bug relates to the following code:

```
        final String esVersionString = propsMap.remove("elasticsearch.version");
        if (esVersionString == null) {
            throw new IllegalArgumentException("property [elasticsearch.version] is missing for plugin [" + name + "]");
        }
        final Version esVersion = Version.fromString(esVersionString);
```

Apart from checking esVersionString for null, we should also check for the String being empty, e.g `Strings.hasLength(esVersionString) == false`.

### Steps to Reproduce

- Take any Elasticsearch plugin from a version other than the current
 
- Manually edit the plugin-descriptor.properties file in the jar and set `elasticsearch.version=`

- Deploy the plugin in the latest version of Elasticsearch 

### Logs (if relevant)

_No response_
server/src/main/java/org/elasticsearch/plugins/PluginInfo.java
import java.util.Properties;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
 * An in-memory representation of the plugin descriptor.
 */
public class PluginInfo implements Writeable, ToXContentObject {
    public static final String ES_PLUGIN_PROPERTIES = "plugin-descriptor.properties";
    public static final String ES_PLUGIN_POLICY = "plugin-security.policy";
    private static final Version LICENSED_PLUGINS_SUPPORT = Version.V_7_11_0;
    private final String name;
    private final String description;
    private final String version;
    private final Version elasticsearchVersion;
    private final String javaVersion;
    private final String classname;
    private final List<String> extendedPlugins;
    private final boolean hasNativeController;
    private final PluginType type;
    private final String javaOpts;
    private final boolean isLicensed;
    /**
     * Construct plugin info.
     *
     * @param name                  the name of the plugin
     * @param description           a description of the plugin
     * @param version               an opaque version identifier for the plugin
     * @param elasticsearchVersion  the version of Elasticsearch the plugin was built for
     * @param javaVersion           the version of Java the plugin was built with
     * @param classname             the entry point to the plugin