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

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

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

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

Gradle

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

Kotlin

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

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

Q&A

解決済

2回答

2749閲覧

【spring】kotlinで作ったプロジェクトのjarファイル作成

isisisimylife

総合スコア42

Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

Gradle

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

Kotlin

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

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

0グッド

0クリップ

投稿2020/04/29 11:32

前提・実現したいこと

作ったアプリケーションをherokuを使ってデプロイしたいと思い、procfileにjarファイルを実行させたいのですがうまいことjarファイルが作れないです。

発生している問題・エラーメッセージ

$:java -jar ./build/libs/ProjectName-SNAPSHOT.jar

を実行すると次のようなエラーが出ます。

Exception in thread "main" java.lang.NoSuchMethodException: com.example.ProjectNameApplication.main([Ljava.lang.String;)

該当のソースコード

ProjectNameApplication.kt

kotlin

1package com.example.ProjectName 2 3import org.springframework.boot.autoconfigure.SpringBootApplication 4import org.springframework.boot.runApplication 5 6@SpringBootApplication 7class ProjectNameApplication 8 9fun main(args: Array<String>) { 10 runApplication<CircleIntroductionApplication>(*args) 11} 12

build.gradle.kts

import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { application id("org.springframework.boot") version "2.2.6.RELEASE" id("io.spring.dependency-management") version "1.0.9.RELEASE" kotlin("jvm") version "1.3.71" kotlin("plugin.spring") version "1.3.71" } group = "com.example" version = "0.0.1-SNAPSHOT" java.sourceCompatibility = JavaVersion.VERSION_1_8 springBoot{ mainClassName = "com.example.ProjectName.ProjectNameApplication" } repositories { mavenCentral() } dependencies { implementation("org.springframework.boot:spring-boot-starter-data-jdbc") implementation("org.springframework.boot:spring-boot-starter-thymeleaf") implementation("org.springframework.boot:spring-boot-starter-web") implementation("com.fasterxml.jackson.module:jackson-module-kotlin") implementation("org.jetbrains.kotlin:kotlin-reflect") implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8") implementation("com.h2database:h2") implementation("org.postgresql:postgresql") testImplementation("org.springframework.boot:spring-boot-starter-test") { exclude(group = "org.junit.vintage", module = "junit-vintage-engine") } } application { // Define the main class for the application mainClassName = "com.example.ProjectName.ProjectNameApplication" } val jar by tasks.getting(Jar::class) { manifest { attributes["Main-Class"] = "com.example.ProjectName.ProjectNameApplication" } from( configurations.compile.get().map { if (it.isDirectory) it else zipTree(it) } ) } tasks.withType<Test> { useJUnitPlatform() } tasks.withType<KotlinCompile> { kotlinOptions { freeCompilerArgs = listOf("-Xjsr305=strict") jvmTarget = "1.8" } }

試したこと

エラーからMain-Classにmainメソッドがないというのはわかるのですがmainメソッドがどこにあるのか分からないです。(ProjectNameApplecationクラスの中にあるのだと思ってました)

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

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

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

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

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

guest

回答2

0

kts

1 manifest { 2 attributes["Main-Class"] = 3 "com.example.ProjectName.ProjectNameApplication" 4 }

とMain-Classを定義しているが、

kotlin

1package com.example.ProjectName 2@SpringBootApplication class ProjectNameApplication 3 4fun main(args: Array<String>) { 5 runApplication<CircleIntroductionApplication>(*args) 6}

と実装しているので、mainメソッドはProjectNameApplicationクラスには定義されていない。
mainメソッドは、パッケージに定義されている。だから、ソースファイル名ProjectNameApplicationKt.kt から com.example.ProjectName.ProjectNameApplicationKtクラスに定義されてるはず。

投稿2020/04/29 12:48

編集2020/04/29 13:03
shiketa

総合スコア3971

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

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

shiketa

2020/04/29 12:50

修正してmainメソッドがみつかったとしても、つぎはrunApplicationがみつからないとか、おそらくいわれる。 実行時に-cpでjarファイルを指定するのもいいが、[Shadow](https://github.com/johnrengelman/shadow)などをつかって、関連するライブラリも含めたjarファイルを作る方法もある。
guest

0

自己解決

mainメソッドをCircleIntroductionApplicationクラスに定義すると無事実行可能なjarファイルを作成する事ができました。

javaの場合を参考にkotlinで似たように書きました

java

1public class Sample { 2 public static void main(String args[]){ 3 System.out.println("Hello! World!"); 4 }

ProjectNameApplication.kt

kotlin

1package com.example.ProjectName 2 3import org.springframework.boot.autoconfigure.SpringBootApplication 4import org.springframework.boot.runApplication 5 6open class ProjectNameApplication { 7 8 companion object { 9 @JvmStatic fun main(args: Array<String>) { 10 runApplication<ProjectNameApplication>(*args) 11 } 12 } 13} 14

投稿2020/04/30 06:33

isisisimylife

総合スコア42

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問