public void load() throws IOException {
    checkNotInit("load");
    try {
      if (baseURL == null || StringUtils.isEmpty(baseURL.toString())) {
        throw new IllegalStateException("no baseURL defined in " + this);
      }

      URL definitionURL = MojoHelper.getUrl(getBaseURL(), REPOSITORY_DEFINITION_FILE);
      if (licenses != null) {
        licenses.clear();
      } else {
        licenses = new ArrayList<License>();
      }

      if (!checkExists(definitionURL)) {
        throw new IllegalArgumentException(
            "no licenses.properties found with url [" + definitionURL + "] for resolver " + this);
      }
      Properties p = new Properties();
      p.load(definitionURL.openStream());

      for (Entry<Object, Object> entry : p.entrySet()) {
        String licenseName = (String) entry.getKey();
        licenseName = licenseName.trim().toLowerCase();
        URL licenseBaseURL = MojoHelper.getUrl(baseURL, licenseName);

        License license = new License();
        license.setName(licenseName);
        license.setBaseURL(licenseBaseURL);

        String licenseDescription = (String) entry.getValue();
        Matcher matcher = LICENSE_DESCRIPTION_PATTERN.matcher(licenseDescription);
        String licenseFile;
        String headerFile;

        if (matcher.matches()) {
          licenseDescription = matcher.group(1).trim();
          licenseFile = matcher.group(2).trim();
          headerFile = matcher.group(3).trim();
        } else {
          licenseFile = License.LICENSE_CONTENT_FILE;
          headerFile = License.LICENSE_HEADER_FILE;
        }

        URL licenseFileURL = getFileURL(license, licenseFile);
        license.setLicenseURL(licenseFileURL);
        URL headerFileURL = getFileURL(license, headerFile);
        license.setHeaderURL(headerFileURL);

        license.setDescription(licenseDescription);

        if (LOG.isInfoEnabled()) {
          LOG.info("register " + license.getDescription());
        }
        if (LOG.isDebugEnabled()) {
          LOG.debug(license);
        }
        licenses.add(license);
      }
      licenses = Collections.unmodifiableList(licenses);
    } finally {
      // mark repository as available
      init = true;
    }
  }