Как встроить код Java в сборку Gradle с помощью задачи JavaExec

У меня есть проект, управляемый Gradle, к которому я хочу добавить простую задачу Java. Эта задача очень специфична для проекта, и если можно помочь, я не хочу разрабатывать ее как отдельный плагин. Итак, вопрос в том, могу ли я определить такую ​​пользовательскую задачу в том же build.gradle, который я использую для своего проекта? Или мне неизбежно нужно упаковать его как отдельный проект (плагин) и установить в локальное репо?

Также, вероятно, важно отметить, что исходный проект не связан с Java (никакой другой код Java не нужно создавать).

P.S. На основании комментариев ниже:

Я хотел бы добавить src/main/java/SomeUsefulStuff.java в существующий проект и скомпилировать этот файл и использовать его в качестве пользовательской задачи. Я понимаю, что его нужно компилировать каждый раз, когда я запускаю сборку, но опять же - код будет небольшим. Однако у него будут некоторые внешние зависимости, такие как Commons IO.


person Bostone    schedule 17.03.2016    source источник
comment
Да, вы можете обернуть вызов Java в пользовательскую задачу. Вы смотрели на JavaExec? docs.gradle.org/current/dsl/org. gradle.api.tasks.JavaExec.html   -  person RaGe    schedule 18.03.2016
comment
Спасибо за указание на это. Расследование прямо сейчас   -  person Bostone    schedule 18.03.2016
comment
На самом деле, насколько я понимаю, этот JavaExec может выполнять некоторый код в каком-то банке, но я прошу упаковать несколько файлов Java в один и тот же проект (один build.gradle) и использовать их для выполнения какой-то полезной задачи. Таким образом, мое дерево проекта будет включать src/main/java, который будет содержать код Java, и этот код необходимо скомпилировать до запуска основной задачи.   -  person Bostone    schedule 18.03.2016
comment
Что все еще находится в компетенции JavaExec. Вам просто нужно сначала убедиться, что ваш исходный код скомпилирован и собран, а ваш JavaExec может указывать на файлы классов или файлы jar в вашем каталоге сборки.   -  person RaGe    schedule 18.03.2016
comment
На самом деле плагин Gradle java определяет, изменились ли ваши java-файлы, и пропустит компиляцию, если двоичные файлы обновлены, поэтому вам даже не нужно беспокоиться об этой стоимости.   -  person RaGe    schedule 18.03.2016
comment
Вы правы - я только что опубликовал решение. Жаль, что вы не написали это как ответ, поэтому я могу принять его.   -  person Bostone    schedule 18.03.2016


Ответы (1)


Благодаря RaGe, который указал на JavaExec, это оказалось довольно просто. Вот что вы делаете:

  1. Поместите свой код Java в /src/main/java так же, как в обычном проекте Java, управляемом Gradle. Убедитесь, что в файле, который вы собираетесь вызывать, есть метод main.
  2. Добавьте apply plugin: 'java' в build.gradle.
  3. Если ваш Java-код имеет какие-либо зависимости от сторонних библиотек, добавьте их в раздел dependencies.
  4. Добавьте новый раздел задач в build.gradle следующим образом:
task usefulStuff(type: JavaExec) {
      classpath = sourceSets.main.runtimeClasspath
      main = 'com.me.gradle.UsefulStuff'
      // arguments to pass to the application
      args 'OhmyGod!'
    }
  1. Теперь вы можете ссылаться на эту задачу как на любую задачу в вашей сборке. Например imporantTask.dependsOn usefulStuff
person Bostone    schedule 18.03.2016