Comparable<Task>
, org.gradle.api.internal.DynamicObjectAware
, org.gradle.api.internal.IConventionAware
, org.gradle.api.internal.TaskInternal
, ExtensionAware
, Task
, PatternFilterable
, org.gradle.util.Configurable<Task>
@Incubating public class ApiJar extends SourceTask
This task and the Jar it produces are designed primarily for internal use in support
of Gradle's "compile avoidance" performance feature. The task is automatically included
in the task graph for any JVM library that declares an api { ... }
specification, and the resulting Jar will automatically be placed on the compile time
classpath of projects that depend on the library in lieu of the library's complete
so-called "Runtime Jar".
Swapping the API Jar in for the Runtime Jar at compile time is what makes "compile avoidance" possible: because the contents of the API Jar change only when actual API changes are made, the API Jar passes Gradle's up-to-date checks, even if the implementation in the Runtime Jar has changed. Ultimately, this means that projects depending on the library in question will need to recompile potentially far less often.
In order to ensure that API Jars change as infrequently as possible, this task and
its supporting classes ensure that only actual public API members are included in the
API Jar, and that the methods among those members are stripped of their implementation.
Because the members included in API Jars exist only for compilation purposes, they need
no actual implementation, and for this reason, all such methods throw
UnsupportedOperationException
in the unlikely event that they are present on
the classpath and invoked at runtime.
The inputs to this task are Java class files which must be provided via
TaskInputs
.
JvmComponentPlugin
Task.Namer
TASK_ACTION, TASK_CONSTRUCTOR_ARGS, TASK_DEPENDS_ON, TASK_DESCRIPTION, TASK_GROUP, TASK_NAME, TASK_OVERWRITE, TASK_TYPE
Constructor | Description |
---|---|
ApiJar() |
Modifier and Type | Method | Description |
---|---|---|
void |
createApiJar() |
|
Set<String> |
getExportedPackages() |
|
File |
getOutputFile() |
|
FileTree |
getSource() |
Returns the source for this task, after the include and exclude patterns have been applied.
|
void |
setExportedPackages(Set<String> exportedPackages) |
|
void |
setOutputFile(File outputFile) |
exclude, exclude, exclude, exclude, getExcludes, getIncludes, getPatternSetFactory, include, include, include, include, setExcludes, setIncludes, setSource, setSource, source
conventionMapping, conventionMapping, getConventionMapping
newInputDirectory, newInputFile, newOutputDirectory, newOutputFile
appendParallelSafeAction, compareTo, configure, dependsOn, doFirst, doFirst, doFirst, doLast, doLast, doLast, finalizedBy, getActions, getAnt, getAsDynamicObject, getConvention, getDependsOn, getDescription, getDestroyables, getDidWork, getEnabled, getExtensions, getFinalizedBy, getGroup, getIdentityPath, getImpliesSubProjects, getInputs, getLocalState, getLogger, getLogging, getMustRunAfter, getName, getOnlyIf, getOutputs, getPath, getProject, getServices, getShouldRunAfter, getStandardOutputCapture, getState, getTaskActions, getTaskDependencies, getTaskIdentity, getTemporaryDir, getTemporaryDirFactory, getTimeout, hasProperty, hasTaskActions, injectIntoNewInstance, isEnabled, isHasCustomActions, mustRunAfter, onlyIf, onlyIf, prependParallelSafeAction, property, replaceLogger, setActions, setDependsOn, setDescription, setDidWork, setEnabled, setFinalizedBy, setGroup, setImpliesSubProjects, setMustRunAfter, setOnlyIf, setOnlyIf, setProperty, setShouldRunAfter, shouldRunAfter, toString
@PathSensitive(RELATIVE) public FileTree getSource()
The PathSensitivity
for the sources is configured to be PathSensitivity.ABSOLUTE
.
If your sources are less strict, please change it accordingly by overriding this method in your subclass.
getSource
in class SourceTask
@OutputFile public File getOutputFile()
public void setOutputFile(File outputFile)
public void createApiJar() throws IOException
IOException