class_docstr: MavenDefinition captures the maven invocation arguments.
  
  It allows creating build directories with the same definition, e.g.
  ```
  build_1 = maven_def.build("/tmp/build-1")
  build_2 = maven_def.build("/tmp/build-2")
  
  ...
  
  build1.install()
  build2.install()
docstr: Initialize a MavenDefinition
  
  Parameters
  ----------
  source : str
           Source directory where the top-level pom.xml is
           located. This is usually the root of the project.
  build_definitions: list(str), optional
  benchmark_definitions: list(str), optional
docstr_tok: ["Initialize","a","MavenDefinition","Parameters","--","--","--","--","--","source",":","str","Source","directory","where","the","top-level","pom.xml","is","located",".","This","is","usually","the","root","of","the","project",".","build_definitions",":","list","(","str",")",",","optional","benchmark_definitions",":","list","(","str",")",",","optional"]
code: def __init__(
      self,
      source,
      build_definitions=None,
      benchmark_definitions=None,
      env=None,
  ):
      """Initialize a MavenDefinition
  
      Parameters
      ----------
      source : str
               Source directory where the top-level pom.xml is
               located. This is usually the root of the project.
      build_definitions: list(str), optional
      benchmark_definitions: list(str), optional
      """
      self.source = os.path.abspath(source)
      self.build_definitions = (
          build_definitions if build_definitions else []
      )
      self.benchmark_definitions = (
          benchmark_definitions if benchmark_definitions else []
      )
      self.env = env
  
imports: import os
  from .command import Command, default_bin
label_desc: Use image node_id 1 to create a new MavenDefinition object  with example: obj = MavenDefinition(source, build_definitions, benchmark_definitions, env)