public static boolean satisfiesRequires(String version, String requires) {
        String requiresVersion = StringUtils.trim(requires);

        // an exact version x.y.z will implicitly mean the same as >=x.y.z
        if (requiresVersion.matches("^\\d+\\.\\d+\\.\\d+$")) {
            // If exact versions are not allowed in requires, rewrite to >= expression
            requiresVersion = ">=" + requiresVersion;
        }
        return version.equals("0.0.0") || checkVersionConstraint(version, requiresVersion);
    }
@Test
    void satisfiesRequires() {
        // match all requires
        String systemVersion = "0.0.0";
        String requires = ">=2.2.0";
        boolean result = VersionUtils.satisfiesRequires(systemVersion, requires);
        assertThat(result).isTrue();

        systemVersion = "2.0.0";
        requires = "*";
        result = VersionUtils.satisfiesRequires(systemVersion, requires);
        assertThat(result).isTrue();

        systemVersion = "2.0.0";
        requires = "";
        result = VersionUtils.satisfiesRequires(systemVersion, requires);
        assertThat(result).isTrue();

        // match exact version
        systemVersion = "2.0.0";
        requires = ">=2.0.0";
        result = VersionUtils.satisfiesRequires(systemVersion, requires);
        assertThat(result).isTrue();

        systemVersion = "2.0.0";
        requires = ">2.0.0";
        result = VersionUtils.satisfiesRequires(systemVersion, requires);
        assertThat(result).isFalse();

        //an exact version x.y.z will implicitly mean the same as >=x.y.z
        systemVersion = "2.1.0";
        // means >=2.0.0
        requires = "2.0.0";
        result = VersionUtils.satisfiesRequires(systemVersion, requires);
        assertThat(result).isTrue();
    }