質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Gradle

Gradleは、ビルド自動化ツールです。 ソフトウェアパッケージやドキュメント、 または実際に何か他の種類のプロジェクトの構築、テスト、公開、展開などを自動化が出来ます

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

Q&A

解決済

2回答

4748閲覧

build.gradle の plugins DSL で拡張プロパティが参照できない

koko_u

総合スコア936

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Gradle

Gradleは、ビルド自動化ツールです。 ソフトウェアパッケージやドキュメント、 または実際に何か他の種類のプロジェクトの構築、テスト、公開、展開などを自動化が出来ます

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

0グッド

0クリップ

投稿2017/05/27 02:20

###背景
Kotlinの勉強を始めたので、Hello World プログラムを Gradle プロジェクトとして作ろうとしている

###ソースコード

公式サイト を見ながら、下記の build.gradle ファイルを(わりと適当な感じで)作成しました。

buildscript { ext { kotlin_version = "1.1.2-2" } dependencies { classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } plugins { id "org.jetbrains.kotlin.jvm" version "$kotlin_version" } repositories { mavenCentral() } dependencies { compile "org.jetbrains.kotlin:kotlin-stdlib-jre8" }

###発生するエラー

FAILURE: Build failed with an exception. * Where: Build file 'XXXX/build.gradle' line: 12 * What went wrong: Could not compile build file 'XXXX/build.gradle'. > startup failed: build file 'XXXX/build.gradle': 12: argument list must be exactly 1 literal non empty string See https://docs.gradle.org/3.5/userguide/plugins.html#sec:plugins_block for information on the plugins {} block @ line 12, column 5. id "org.jetbrains.kotlin.jvm" version "$kotlin_version" ^ 1 error * Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

###エラーの考察

どうやら、"$kotlin_version" が解決できずに、空文字になってしまっているようです。ためしに

plugins { id "org.jetbrains.kotlin.jvm" version "1.1.2-2" }

と直接バージョンを記載すれば正常にビルドできます。

もちろん、plugins DSL を使わずに

apply plugin: 'kotlin'

としても(buildscript にmavenCentralを追加すれば)動作します。

###質問事項

いかんせんコピペでしか build.gradle を書いたことがないので、書き方を間違えている気がしますが、plugins DSL を利用する時に、プラグインのバージョン指定をいい感じに変数にする方法が知りたいです。

kotlin-gradle-plugin と kotlin プラグインの指定で 2回 "1.1.2-2" のリテラルが登場するとモヤモヤしてしまう。

###バージョン情報

$ gradle -version ------------------------------------------------------------ Gradle 3.5 ------------------------------------------------------------ Build time: 2017-04-10 13:37:25 UTC Revision: b762622a185d59ce0cfc9cbc6ab5dd22469e18a6 Groovy: 2.4.10 Ant: Apache Ant(TM) version 1.9.6 compiled on June 29 2015 JVM: 1.8.0_131 (Oracle Corporation 25.131-b11) OS: Linux 4.4.0-53-generic amd64

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

plugin の指定方法を勘違いしていたようです。

これまでの指定

buildscript { repositories { mavenCentral() } dependencies { classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.1.2-2" } } apply plugin: 'kotlin'

buildscript にプラグインのある場所を指定して、 apply plugin ではその「名前」を指定する

plugins DSL の指定

plugins { id "org.jetbrains.kotlin.jvm" version "1.1.2-2" }

plugins に直接プラグインを指定するので、特に buildscript の記載は不要

その他の依存について

モジュールの依存に kotlin-stdlib などを追加する時にも 1.1.2-2 のバージョン指定が必要な気もしてきますが、Kotlin 1.1.2 からはプラグインのバージョンから自動的に解決してくれるようなので

plugins { id "org.jetbrains.kotlin.jvm" version "1.1.2-2" } repositories { mavenCentral() } dependencies { compile "org.jetbrains.kotlin:kotlin-stdlib-jre8" }

と書くのが正解のようです。

投稿2017/05/27 22:22

koko_u

総合スコア936

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

build.gradleを直接書いたことは無いのですが、下記のサイトでplugins DSLの仕様を読んだ感じ

PluginDependenciesSpec

PluginDependenciesSpec.id(java.lang.String), PluginDependencySpec.version(java.lang.String) and PluginDependencySpec.apply(boolean) methods must be called with a literal argument (i.e. not a variable)

id、version、applyメソッドは、リテラル引数(変数ではない)で指定する必要があります。とあるので

id "org.jetbrains.kotlin.jvm" version "${kotlin_version}"とバージョンを変数で指定するのは無理みたいですね。

The plugins DSL is currently incubating. Please be aware that the DSL and other configuration may change in later Gradle versions.

あと、plugins DSLプラグインは現在インキュベート中で今後のGradleバージョンで変更される可能性があります。とも書いてあるので、現状はapply plugin: 'kotlin'で指定したほうが良さそうです。

投稿2017/05/27 03:44

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問