Android Studio:JavaSE应用程序

问题描述 投票:0回答:2

我正在开发一个应该在Android和桌面(JavaSE)上运行的项目。为此我将它分成3个java模块:

  • AndroidApp
  • 共同核心
  • 桌面应用

为什么我使用Android Studio(AS)显而易见。我几乎可以使用所有东西,但JavaSE模块的“运行”按钮。问题很简单:类路径不完整。该模块编译,但它不运行。当我将它构建到JAR中时,运行正常。 JAR包含所有必需的依赖项。唯一的问题是在JavaSE模块上使用该死的“运行”按钮。

顶级build.gradle :(几乎由AS生成)

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        jcenter()
        google()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.1'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
        google()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

Common Core build.gradle:

apply plugin: 'java-library'

targetCompatibility="1.8"
sourceCompatibility="1.8"

dependencies {
    api 'org.nanohttpd:nanohttpd:2.3.1'
    api 'com.google.code.gson:gson:2.8.1'
    api 'org.apache.commons:commons-text:1.1'
    api files('src/main/resources')
}

DesktopApp build.gradle:

apply plugin: 'java'

targetCompatibility="1.8"
sourceCompatibility="1.8"

dependencies {
    implementation project(':CommonCore')
    implementation 'org.xerial:sqlite-jdbc:3.21.0.1'
}

jar {
    manifest {
        attributes 'Main-Class': 'myproject.Main'
    }

    from {
        configurations.compileClasspath.collect { it.isDirectory() ? it : zipTree(it) }
    }
}

Android App build.gradle :(跳过实际的android设置以保持简短)

apply plugin: 'com.android.application'

dependencies {
    implementation 'com.android.support:appcompat-v7:26.0.2'
    implementation 'com.android.support.constraint:constraint-layout:1.0.2'
    implementation project(':CommonCore')
}

android { ... }

当我运行它时,我得到:

Exception in thread "main" java.lang.NoClassDefFoundError: fi/iki/elonen/NanoHTTPD

显然JVM无法从CommonCore中找到依赖项'org.nanohttpd:nanohttpd:2.3.1'。检查类路径后,我看到:

/Applications/Android Studio.app/Contents/jre/jdk/<a ton of unused JARs>
/Users/bamboo/AndroidStudioProjects/MyProject/DesktopApp/build/classes/java/main
/Users/bamboo/AndroidStudioProjects/MyProject/CommonCore/build/classes/java/main

缺少Gradle托管依赖项的条目。

我做错了什么? AS必须看到它们,因为自动完成功能很好。

java android-studio gradle
2个回答
0
投票

将依赖项放在runtime()中的gradle中,例如:

dependencies {
    runtime(
        [group: 'org.nanohttpd', name: 'nanohttpd', version: '2.3.1'],
    )
}

Reference


0
投票

解决此问题的一种方法是将NetBeans与Gradle插件一起用于JavaSE开发。

© www.soinside.com 2019 - 2024. All rights reserved.