def setup(p = {})
      p = p.clone

      @libs = p.delete(:libs)
      @srcs = p.delete(:srcs)
      @exclude = p.delete(:exclude)
      @mods = p.delete(:mods)
      @name = p.delete(:name)
      @lang_level = p.delete(:lang_level)

      raise "unknown options: #{p.inspect}" unless p.empty?
    end
def setup(p = {})
      p = p.clone

      @libs = p.delete(:libs)
      @srcs = p.delete(:srcs)
      @exclude = p.delete(:exclude)
      @mods = p.delete(:mods)
      @name = p.delete(:name)
      @lang_level = p.delete(:lang_level)

      raise "unknown options: #{p.inspect}" unless p.empty?
    end
:libs - set of libraries, export is determined for each library from product's meta
 :srcs - description of sources folders (array), each element looks like:
         { path: путь, test: false|true, type: :java|:res|:resources }
         test - if omitted then false
         type - if omitted then java
 :exclude - list of exclude folders
 :mods - array of dependent modules, each entry looks like:
         { name: <module_name>, export: true|false }
         export is true if omitted
 :name - module name, .iml name will be same
 :lang_level - language level, optional