eclipse-platform / eclipse-platform/eclipse.platform

Eclipse Ant Contributions are not available in implicit targets introduced when using AntRunner

Abierto
#616 1 comentario 0 reacciones 0 asignados Ver en GitHub
Lenguaje dominante
Java
Estrellas
165
Forks
174
Merge medio
2 d 8 h
PR fusionados (30 d)
22

Descripción

# Motivation and Severity

The [Epsilon CI Container](https://gitlab.com/committed-consulting/mde-devops/epsilon-ci-container) project uses Eclipse `AntRunner` to execute Model-Driven Workflows. To increase the adoption of this approach, it is important to keep the writing of the ant build files as simple as possible. Often, client builds only have the form of a linear set of instructions.

Since Ant 1.6.0, every project includes an implicit target that contains any and all top-level tasks and/or types. This target will always be executed as part of the project's initialization, even when Ant is run with the [-projecthelp](https://ant.apache.org/manual/running.html#options) option.

This allows a build file to have the following form:

```ant


```

Which is preferable to using:

```ant




```

Also, the implicit target acts as a prelude to all other targets, allowing to perform global actions and definitions.

The [Eclipse Ant support](https://help.eclipse.org/latest/topic/org.eclipse.platform.doc.user/concepts/concepts-antsupport.htm) contributes tasks as using the [Ant Task Extension Point](https://help.eclipse.org/latest/topic/org.eclipse.platform.doc.isv/reference/extension-points/org_eclipse_ant_core_antTasks.html). The Eclipse platform itself uses this extension point to contribute the [`eclipse.convertPath`](https://help.eclipse.org/latest/topic/org.eclipse.platform.doc.isv/guide/ant_eclipse_tasks.htm) task.

Executing the [AntRunner](https://help.eclipse.org/latest/index.jsp?topic=%2Forg.eclipse.platform.doc.user%2Ftasks%2FantRunner.htm) should yield the same result as [Running Ant from the Workbench](https://help.eclipse.org/latest/topic/org.eclipse.platform.doc.user/tasks/tasks-ant-running.htm), but when run in the `AntRunner` application, contributed tasks and types are shown as undefined, and the build fails.

# Issue

Developers can not use Ant [Contributions](https://help.eclipse.org/latest/topic/org.eclipse.platform.doc.isv/reference/extension-points/org_eclipse_ant_core_antTasks.html) in implicit targets.

* Actual Behaviour: When an Ant build that contains an implicit target which references a task or type that is a [Contribution](https://help.eclipse.org/latest/topic/org.eclipse.platform.doc.isv/reference/extension-points/org_eclipse_ant_core_antTasks.html) is executed using AntRunner, it fails and the type is shown as missing.

```bash
at org.apache.tools.ant.UnknownElement.getNotFoundException(UnknownElement.java:504)
at org.apache.tools.ant.UnknownElement.makeObject(UnknownElement.java:436)
at org.apache.tools.ant.UnknownElement.maybeConfigure(UnknownElement.java:166)
at org.apache.tools.ant.Task.perform(Task.java:349)
at org.apache.tools.ant.Target.execute(Target.java:449)
at org.apache.tools.ant.helper.ProjectHelper2.parse(ProjectHelper2.java:184)
at org.eclipse.ant.internal.core.ant.InternalAntRunner.parseBuildFile(InternalAntRunner.java:392)
at org.eclipse.ant.internal.core.ant.InternalAntRunner.getTargetNames(InternalAntRunner.java:486)
at org.eclipse.ant.internal.core.ant.InternalAntRunner.processUnrecognizedTargets(InternalAntRunner.java:1253)
at org.eclipse.ant.internal.core.ant.InternalAntRunner.processCommandLine(InternalAntRunner.java:1231)
at org.eclipse.ant.internal.core.ant.InternalAntRunner.run(InternalAntRunner.java:644)
at org.eclipse.ant.internal.core.ant.InternalAntRunner.run(InternalAntRunner.java:573)
```

* Expected Behaviour: The build succeeds.

# Technical Detail and Background

For an [Ant Project](https://ant.apache.org/manual/using.html#projects) the following attributes are specified:

Attribute | Description | Required
-- | -- | --
name | the name of the project. | No
default | the default target to use when no target is supplied. | **No; however, since Ant 1.6.0, every project includes an implicit target that contains any and all top-level tasks and/or types. This target will always be executed as part of the project's initialization, even when Ant is run with the -projecthelp option.**

As highlighted,

> since Ant 1.6.0, every project includes an implicit target that contains any and all top-level tasks and/or types. This target will always be executed as part of the project's initialization, even when Ant is run with the [-projecthelp](https://ant.apache.org/manual/running.html#options) option.

# Possible Cause

When processing the command line, the AntRunner attempts to get the target names. This leads to a parse that uses reflection and the classpath to identify legal tasks and types. However, `org.eclipse.ant.internal.core.ant.InternalAntRunner.setTasks(Project)` has not been called at this time, and hence `org.eclipse.ant.core.AntCorePreferences.getTasks()` are not known.

It seems that `setTasks(Project)` must be called earlier. There are three locations in `org.eclipse.ant.internal.core.ant.InternalAntRunner` that need to be amended, as far as I can see:

* [`getTargetNames()`](https://github.com/eclipse-platform/eclipse.platform/blob/18d0171854eec533f733f60d0c278acdf0c9f8ae/ant/org.eclipse.ant.core/src_ant/org/eclipse/ant/internal/core/ant/InternalAntRunner.java#L478)
* [`getTargets()`](https://github.com/eclipse-platform/eclipse.platform/blob/18d0171854eec533f733f60d0c278acdf0c9f8ae/ant/org.eclipse.ant.core/src_ant/org/eclipse/ant/internal/core/ant/InternalAntRunner.java#L416)
* [`run(List)`](https://github.com/eclipse-platform/eclipse.platform/blob/18d0171854eec533f733f60d0c278acdf0c9f8ae/ant/org.eclipse.ant.core/src_ant/org/eclipse/ant/internal/core/ant/InternalAntRunner.java#L606)

Guía de contribución

Abrir la guía de contribución

Línea de trabajo

Comienza en ant/org.eclipse.ant.core/src_ant/org/eclipse/ant/internal/core/ant/InternalAntRunner.java, leyendo getTargets(), getTargetNames() y run(List) junto con setTasks(Project). Reproduce el build proporcionado con target implícito usando AntRunner y verifica que se reconoce una task aportada por Eclipse, como eclipse.convertPath, y que el build tiene éxito.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
java
Área
build-system, tooling
Tipo de issue
Error
Dificultad
3/5
Tiempo estimado
1-2 días
Estado de actividad
Estancado
Claridad
Bien especificado
Aptitud para principiantes
45/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.