Es gab eine Bibliothek, die nur in Java verwendet werden konnte, und es gab eine vorhandene Anwendung, die sie in Kotlin implementierte. Dieses Mal wollte ich einige der Funktionen aus einem Python-Stapel aufrufen und sie verwenden Ändern Sie die Hauptklasse der Kotlin-Anwendung, um ein Glas zu erstellen Ich wollte Kotlin mit einem Java-Befehl von Python treffen.
Es scheint, dass Sie, wenn Sie Gradle gut verwenden, die Hauptklasse ändern und Fatjar machen können. Ich werde herausfordern
Kotlin JDK 8 java8 jdk14 Gradle 6.4.1
Ich habe versucht, ein einfaches Projekt zu erstellen, um es zu versuchen
app
├── gradle
│ └── wrapper
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── settings.gradle
├── build.gradle
└── src
├── main
│ ├── kotlin
│ │ └── automated_data_create
│ │ ├── App.kt
│ │ ├── App2.kt
│ │ └── model
│ │ └── Osushi.kt
│ └── resources
└── test
├── kotlin
│ └── automated_data_create
│ └── AppTest.kt
└── resources
app/src/main/kotlin/automated_data_create/App.kt
/*
* This Kotlin source file was generated by the Gradle 'init' task.
*/
package automated_data_create
import automated_data_create.model.Osushi
class App {
val greeting: String
get() {
return "Hello world."
}
}
fun main(args: Array<String>) {
println(App().greeting)
val osushi = Osushi("Thunfisch", 100)
println("Ich habe das ausgewählt.: " + osushi.name + " -> " + "¥" + osushi.price)
}
app/src/main/kotlin/automated_data_create/App2.kt
/*
* This Kotlin source file was generated by the Gradle 'init' task.
*/
package automated_data_create
import automated_data_create.model.Osushi
class App2 {
val greeting: String
get() {
return "Hello world."
}
}
fun main(args: Array<String>) {
println(App2().greeting)
val osushi = Osushi("Uni", 200)
println("Ich habe das ausgewählt.: " + osushi.name + " -> " + "¥" + osushi.price)
}
app/build.gradle
/*
* This file was generated by the Gradle 'init' task.
*
* This generated file contains a sample Kotlin application project to get you started.
*/
plugins {
// Apply the Kotlin JVM plugin to add support for Kotlin.
id 'org.jetbrains.kotlin.jvm' version '1.3.61'
// Apply the application plugin to add support for building a CLI application.
id 'application'
id 'com.github.johnrengelman.shadow' version '5.0.0'
id 'java'
}
repositories {
// Use jcenter for resolving dependencies.
// You can declare any Maven/Ivy/file repository here.
jcenter()
}
dependencies {
// Align versions of all Kotlin components
implementation platform('org.jetbrains.kotlin:kotlin-bom')
// Use the Kotlin JDK 8 standard library.
implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8'
// Use the Kotlin test library.
testImplementation 'org.jetbrains.kotlin:kotlin-test'
// Use the Kotlin JUnit integration.
testImplementation 'org.jetbrains.kotlin:kotlin-test-junit'
}
application {
// Define the main class for the application.
mainClassName = 'automated_data_create.AppKt'
}
Sie können das Projekt mit dem folgenden Befehl erstellen
$ ./gradlew shadowJar
# or
$ gradle shadowJar
In diesem Fall wird die AppKt-Datei in mainClassName in der Datei app / build.gradle angegeben. App.kt wird als Hauptklasse ausgeführt.
Befehl zum Ausführen des erstellten JAR
$ java -jar xxx-1.0-SNAPSHOT-all.jar
Hello world.
Ich habe das ausgewählt.:Thunfisch-> ¥100
Fügen Sie die Build-Aufgabe zur Datei gradle.build hinzu.
app/build.gradle
:
application {
// Define the main class for the application.
mainClassName = 'automated_data_create.AppKt'
}
#Fügen Sie unten von hier hinzu ↓
task customFatJar2(type:Jar) {
//Hauptklasseneinstellungen
manifest {
attributes 'Main-Class': 'automated_data_create.App2Kt'
}
baseName = 'second'
//Fügen Sie abhängige Bibliotheken hinzu
from { configurations.compileClasspath.collect { it.isDirectory() ? it : zipTree(it) } }
with jar
}
Hier wird die Hauptklasse als App2.Kt angegeben. Geben Sie einen beliebigen JAR-Dateinamen für baseName an.
Beachten Sie, dass das Hinzufügen abhängiger Bibliotheken von der Version von gradle abhängt.
Holen Sie sich das Kompilierungsset in compile
: Abhängigkeiten als Liste.
compileClasspath
: Ruft die in der Implementierung usw. registrierten Abhängigkeiten in einer Liste ab.
Referenz: So verwenden Sie Kompilieren und Implementieren ordnungsgemäß https://qiita.com/opengl-8080/items/6ad642e0b016465891de Es war leicht zu erkennen, wie cofigrations.compile und configuration.compileClasspath aussah https://qiita.com/MirrgieRiana/items/d3271f6979c1451207a6
$ ./gradlew customFatJar2
or
$ gradle customFatJar2
Deprecated Gradle features were used in this build, making it incompatible with Gradle 7.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/6.4.1/userguide/command_line_interface.html#sec:command_line_warnings
BUILD SUCCESSFUL in 1s
$ java -jar build/libs/second.jar
Hello world.
Ich habe das ausgewählt.:Uni-> ¥200
Jetzt, da Sie Kotlins Anwendung mit dem Java-Befehl aufrufen können, Jetzt müssen wir es nur noch von Python aus ausführen! Übrigens habe ich vor, es mit der Unterprozessbibliothek von Python aus auszuführen. Bitte lassen Sie mich wissen, ob es einen besseren Weg gibt!
Recommended Posts