code: public static AppDescriptor of(String appName, String packageName) {
          String[] packages = packageName.split(S.COMMON_SEP);
          return of(appName, packageName, Version.ofPackage(packages[0]));
      }
docs: Create an `AppDescriptor` with appName and package name specified
  
  If `appName` is `null` or blank, it will try the following
  approach to get app name:
  
  1. check the {@link Version#getArtifactId() artifact id} and use it unless
  2. if artifact id is null or empty, then infer app name using {@link AppNameInferer}
  
  @param appName
  the app name
  @param packageName
  the package name of the app
  @return
  an `AppDescriptor` instance