Ich konnte die Abhängigkeit der Java-Anwendung nach der Verwendung von Android Studio 3 nicht auflösen. Wie gehe ich damit um? Teil 2

Überblick

Ich habe diesen Artikel schon einmal geschrieben. Umgang mit Java-Anwendungsabhängigkeiten, die mit Android Studio 3 nicht gelöst werden können

Die Methode in diesem Artikel war nicht klug, daher habe ich einen guten Weg gefunden, es erneut zu versuchen.

Verfassung

Jedes build.gradle sieht so aus ./MyApplication/purejava/build.gradle ./MyApplication/app/build.gradle ./MyApplication/build.gradle

Methode

Fügen Sie zunächst apply plugin: 'idea' zum build.gradle des Moduls hinzu, das Sie anwenden möchten. Dieses Mal wird Gson als Beispiel hinzugefügt. Ansonsten wird es standardmäßig automatisch generiert.

groovy:./MyApplication/purejava/build.gradle


apply plugin: 'java-library'
apply plugin: 'idea' //Dies

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation 'com.google.code.gson:gson:2.8.2'
}

sourceCompatibility = "1.7"
targetCompatibility = "1.7"

Alternativ kann es auf alle Module gleichzeitig angewendet werden, indem es dem root build.gradle hinzugefügt wird.

groovy:./MyApplication/build.gradle


allprojects {
    apply plugin: 'idea'
}

Erstellen Sie als Nächstes standardmäßig die Anwendungskonfiguration und fügen Sie die Aufgabe ** Gradle-Aufgabe ausführen ** zu ** Idee ** zu ** Vor dem Start ** hinzu. スクリーンショット_2018-01-20_0_19_57.png

Jetzt können Sie von hier aus mit aufgelösten Abhängigkeiten ausführen. Wenn Sie es mit Debug ausführen, können Sie natürlich an einem Haltepunkt anhalten. スクリーンショット 2018-01-20 0.30.31.png

Ergebnis

Wenn Sie Gson in der entsprechenden Klasse des purejava-Moduls verwenden,

java:./MyApplication/purejava/src/main/com/example/MyClass.java


public class MyClass {
    public MyClass() {
        String jsonString = "{\"a\": 12345, \"b\": 67890}";

        JsonObject jsonObject = new JsonParser().parse(jsonString).getAsJsonObject();

        System.out.println("a ist" + jsonObject.get("a"));
        System.out.println("b ist" + jsonObject.get("b"));
    }

    public static void main(String[] args) throws Exception {
        new MyClass();
    }
}

Gerne richtig zu benutzen

a ist 12345
b ist 67890

Warum

Projekt mit Gradle Files-Updates synchronisieren **. Iml **.

Wenn Sie beispielsweise .iml betrachten, wenn Gson in Abhängigkeiten ist, wird ein solcher orderEntry generiert.

.iml


<orderEntry type="library" exported="" scope="PROVIDED" name="gson-2.8.2" level="project" />

Was hier falsch ist, ist scope =" PROVIDED ". Dies liegt daran, dass durch manuelles Ändern in scope =" " die Abhängigkeit aufgelöst werden kann, ohne dass die oben genannte Ideenaufgabe ausgeführt werden muss.

Führen Sie also "./gradlew idea" aus. Wenn Sie sich danach .iml ansehen, wird das Gson-JAR mit dem vollständigen Pfad angegeben, und die Abhängigkeit wird aufgelöst.

Fazit

Ich denke, es gibt eine Möglichkeit, eine Aufgabe in .gradle zu implementieren, die den Bereich auf "" ändert, aber ich habe es nicht verstanden, also habe ich aufgegeben.

Im Moment ist es sehr gut, weil es ausgeführt werden kann, so dass es leicht an einem Haltepunkt gestoppt werden kann, wie es in der Android Studio 2.x-Ära war.

Beiseite

Da die Ideenaufgabe jedes Mal ausgeführt wird, wird die Ausführung um ein Tempo verzögert. Schließlich scheint es, dass .iml nur aktualisiert wird, wenn das Projekt mit Gradle-Dateien synchronisiert wird. Daher habe ich auch eine Version der Task "Konfiguration ohne Idee ausführen" in der Task "Gradle ausführen" erstellt und verwende diese normalerweise und manuell ./ nach der Synchronisierung Möglicherweise möchten Sie gradlew idea ausführen, um die .iml zu aktualisieren. Ist es möglich, zusätzliche Aufgaben während der Synchronisierung des Projekts mit Gradle-Dateien auszuführen?

Recommended Posts

Ich konnte die Abhängigkeit der Java-Anwendung nach der Verwendung von Android Studio 3 nicht auflösen. Wie gehe ich damit um? Teil 2
Nach der Verwendung von Android Studio 3 können Java-Anwendungsabhängigkeiten nicht mehr aufgelöst werden. Was tun?
Was benötigen Sie am Ende, um eine Web-App mit Java zu erstellen? Erklären Sie den Mechanismus und was zum Lernen notwendig ist
Was ist mit dem Fehler "Kann nicht gelesen werden oder ist keine gültige ZIP-Datei?" Zu tun
[Für Anfänger] Ruby soll Rubin sein, aber was ist damit?