Skip to content

Def-Classpath

Def classes

Def classes are the compilation result of Java/Kotlin source files located in jeka/def. They can be declared at root or in sub-folders for packages. Execution engine compiles these files on the fly prior adding them to the Jeka classpath.

It is possible to specify compilation options by annotating a def class as :

@JkCompileOption("-deprecation")
@JkCompileOption({"-processorPath", "/foo/bar"})
class MyBuild {
  ...
}

Note

  • jeka/def can also contain classpath resources.
  • Classes having a name starting by _ are skipped from compilation.

Java source files definded in def dir are compiled using the running JDK.

Kotlin sources are compiled using Kotlin version specified by jeka.kotlin.version property if present or using Kotlin compiler specified by KOTLIN_HOME environment variable.

Jeka Classpath

Under the hood, Jeka simply executes Java byte code within a flat classloader. This classloader classpath is constructed from :

  • jar files present in jeka/boot dir
  • dependencies injected via command line and annotations
  • compiled def classes
  • Jeka classpaths coming from imported projects

Injected Dependencies

It's possible to inject transitively dependencies into classpath by either annotating def classes or by mentionning it in command line.

Note

By default, jeka fetch dependencies from maven central (https://repo.maven.apache.org/maven2).

You can select another default repository by setting the jeka.repos.download.url options. We recommend storing this value in your [USER DIR]/.jeka/options.properties file to be reused across projects.

For more details, see JkRepoFromOptions javadoc.

Inject from Def Classes

Annotate a def class with @JkInjectClasspath mentioning either a module coordinate or a path on the local file system.

@JkInjectClasspath("org.seleniumhq.selenium:selenium-remote-driver:4.0.0")
@JkInjectClasspath("../libs/myutils.jar")
class MyBuild {
  ...
}

Note

Update your IDE dependencies right after adding this annotation in order it can be used inside your def classes. jeka intellij#iml or jeka eclipse#files

Warning

Dependencies imported via @JkInjectClasspath are imported for all def classes and not only for annotated class.

Inject from Command Line

Specify path or module coordinates in the command line using '@' as @my.org:a-jeka-plugin:1.0.0 or @../libs/myutils.jar.

This feature is meant to invoke KBeans dynamically.

Imported Projects

Jeka supports multi-module projects in Jeka classpath of a given project can include Jeka classpath of another one.

@JkInjectProject("../core")
class MyBuild {
  ...
}