Я не могу отладить приложение JavaEE с помощью Gradle, Dropwizard и IntelliJ - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть приложение JavaEE с Gradle, которое я добавил Dropwizard в соответствии с официальной документацией (для Maven) и другим руководством для Gradle:

https://www.dropwizard.io/1.3.5/docs/getting-started.html https://karollotkowski.wordpress.com/2015/10/13/run-dropwizard-with-gradle/

Приложение хорошо настроено и работает с Gradle и Dropwizard, но я хочу отладить приложение, используя точки останова, и я не могу это сделать. Я следую этому руководству:

https://medium.com/grandcentrix/how-to-debug-gradle-plugins-with-intellij-eef2ef681a7b

Это выглядит нормально, потому что когда я запускаю команду:

sudo ./gradlew run -Dorg.gradle.debug = true --no-daemon

Gradle ждет, пока я не нажму на конфигурацию удаленной отладки (которую я создал) в IntelliJ, чтобы запустить приложение, поэтому все должно быть в порядке. Тем не менее, он никогда не останавливается в моих точках останова (похоже, он игнорирует их). Любая идея? Я делюсь файлами, которые считаю важными:

build.gradle:

apply plugin: 'com.google.protobuf'
apply plugin: 'maven'
apply plugin: 'maven-publish'
apply plugin: 'application'
apply plugin: 'com.github.johnrengelman.shadow'

project.ext {
    dropwizardVersion = '1.3.0'
    configPath = "$rootProject.projectDir/config/"
}

//
// Loads of repositories and dependencies including dropwizard
//

protobuf {
// Configure the protoc executable
    protoc {
        // Download from repositories
        artifact = 'com.google.protobuf:protoc:3.0.0'
    }

    generateProtoTasks.generatedFilesBaseDir = 'generated'

    generateProtoTasks {
        // all() returns the collection of all protoc tasks
        all().each { task ->
            // Here you can configure the task
        }

        // In addition to all(), you may get the task collection by various
        // criteria:

        // (Java only) returns tasks for a sourceSet
        ofSourceSet('main')

    }
}

mainClassName = "com.company.MyApplication"

run {
    args 'server', configPath + ‘myapplication_config.yml'
}

shadowJar {
    mergeServiceFiles()
    exclude 'META-INF/*.DSA'
    exclude 'META-INF/*.RSA'
}

jar {
    manifest {
        attributes 'Main-Class': mainClassName
    }
}

build.dependsOn shadowJar

MyApplicationApplication (приложение Dropwizard):

public class MyApplicationApplication extends Application<MyApplicationConfiguration> {

    public static void main(String[] args) throws Exception {

        new MyApplicationApplication().run(args);
    }

    @Override
    public void run(MyApplicationConfiguration configuration,
                    Environment environment) {

        environment.jersey().register(new RESTUserBilling());

    }
}

MyApplicationConfiguration (конфигурация Dropwizard):

public class MyApplicationConfiguration extends Configuration {

}

myapplication_config.yml:

# Logging settings.
logging:

  # The default level of all loggers. Can be OFF, ERROR, WARN, INFO, DEBUG, TRACE, or ALL.
  level: ERROR, DEBUG

  # Logger-specific levels.
  loggers:

    # Sets the level for 'com.example.app' to DEBUG.
    com.company: DEBUG

  appenders:
  - type: console
  - type: file
    threshold: INFO
    logFormat: "%-6level [%d{HH:mm:ss.SSS}] [%t] %logger{5} - %X{code} %msg %n"
    currentLogFilename: /var/log/dropwizard/myapplication.log
    archivedLogFilenamePattern: /var/log/dropwizard/myapplication-%d{yyyy-MM-dd}-%i.log.gz
    archivedFileCount: 7
    timeZone: UTC
    maxFileSize: 10MB

server:
  applicationContextPath: /myapplication
  adminConnectors:
  -
    port: 8091
    type: http
  applicationConnectors:
  -
    port: 80
    type: http

Удаленная настройка в IntelliJ IntelliJ 2018.2.1 (Community Edition)

enter image description here

Gradle 2.12

Java версия 1.8.0_181

Dropwizard версия 1.3.0

1 Ответ

0 голосов
/ 05 сентября 2018

Используя -Dorg.gradle.debug=true, как в этой статье, вы отлаживаете процесс Gradle, а не приложение, над которым работаете. Gradle запускает ваше приложение в другом процессе. Вы должны попробовать gradle --debug-jvm run. Подробнее об этом здесь и здесь

И обнови Gradle, серьезно. 2.12 слишком стар Используйте обертку .

Если 2.12 не понимает --debug-jvm (что может иметь место), просто найдите способ предоставить строку, подобную этой - -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 - для JVM, которую запускает ваше приложение (не для самого Gradle).

...