Package com.zfabrik.components.java.build

## Interface ICompiler

-     public interface ICompiler

  Java component (see `IJavaComponent`) compiler extension interface.

  This interface is implemented by implementation of components of type `com.zfabrik.compiler`.

  Supported configuration properties:

  compiler.id
    An identifier for the compiler to be used when defining the compile order of a Java component using the `java.compile.order` property on the Java component.

  Compiler extensions operate over a build result folder (usually .class files and other binary resources) that will be JARred at when all compilers have completed. Compilers will be passed a class path in the form of a class loader. When required, the actual files and folders of the classpath can be retrieved by casting that class loader to `URLClassLoader` and invoking `URLClassLoader.getURLs()`.

  Compilers are invoked in order of the specified `java.compile.order` (see `IJavaComponent.COMPILE_ORDER`). When declaring a compiler, a `compiler.id` must be specified that is used to reference the compiler when specifying the compiler order.

  An example compiler component declaration looks like this:

       #
       # it's a compiler
       #
       com.zfabrik.component.type=com.zfabrik.java.compiler
       #
       # it's feature_x_compiler
       #
       compiler.id=feature_x_compiler
       #
       # it's implemented here
       #
       component.className=com.acme.impl.FeatureXCompiler

  Author:
    hb

- - ### Field Summary

    Fields
    Modifier and Type | Field | Description
    --- | --- | ---
    `static java.lang.String` | `COMPILER_ID` | The compiler ID must be defined in the compiler component - e.g.
    `static java.lang.String` | `TYPE` | Compilers must define this type

  - ### Method Summary

    All Methods Instance Methods Default Methods Deprecated Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `default ICompiler` | `ALL()` | Retrieve the "all" compiler, that uses the compile order to decide on what more specific compilers to use
    `default boolean` | `compile​(ICompilationContext compilationContext)` | A general purpose compiler api using a class loader as class path abstraction.
    `default boolean` | `compile​(java.lang.String compName, java.io.File[] src, java.io.File dest, java.lang.ClassLoader cl)` | Deprecated. Implement `compile(ICompilationContext)` instead.
    `default void` | `init​(ICompilerContext context)` | Compiler initialization

- - ### Field Detail

    - #### TYPE

          static final java.lang.String TYPE

      Compilers must define this type
      See Also:
        Constant Field Values

    - #### COMPILER_ID

          static final java.lang.String COMPILER_ID

      The compiler ID must be defined in the compiler component - e.g. `java` or `scala`
      See Also:
        Constant Field Values

  - ### Method Detail

    - #### ALL

          default ICompiler ALL()

      Retrieve the "all" compiler, that uses the compile order to decide on what more specific compilers to use
      Returns:

    - #### compile

          @Deprecated
          default boolean compile​(java.lang.String compName,
                                  java.io.File[] src,
                                  java.io.File dest,
                                  java.lang.ClassLoader cl)

      Deprecated.
      Implement `compile(ICompilationContext)` instead.
      A general purpose compiler api using a class loader as class path abstraction. Returns true if the compilation passed otherwise it returns false.
      Parameters:
        `compName` - the name of the component
        `src` - folder containing the source files
        `dest` - destination folder will contain compile results
        `cl` - class loader as class path abstraction
      Returns:
        true, iff compilation succeeds

    - #### compile

          default boolean compile​(ICompilationContext compilationContext)

      A general purpose compiler api using a class loader as class path abstraction. Returns true if the compilation passed otherwise it returns `false`. This method to be implemented for part specific handling. It defaults to invocation of `compile(String, File[], File, ClassLoader)`.
      Parameters:
        `compName` - the name of the component
        `src` - folder containing the source files
        `dest` - destination folder will contain compile results
        `cl` - class loader as class path abstraction
        `part` - of the component to compile
      Returns:
        true, iff compilation succeeds

    - #### init

          default void init​(ICompilerContext context)

      Compiler initialization