Не могу разрешить символы из зависимости проекта, возможно, потому что я использую импортированную сборку муравья - PullRequest
0 голосов
/ 25 июня 2019

Фон

Я модифицирую Apache JMeter для использования в качестве автоматизированного инструмента для тестирования.

Исторически, у меня просто был отличный проект, который использовал gradle, и я брал артефакт jar этой сборки и помещал его в каталог jmeter/bin.
Это позволило мне вызывать мой отличный код из сценариев jmeter.

Теперь я изменяю код JMeter, который запускает сценарии, чтобы выполнить какую-либо настраиваемую запись в журнал и передать некоторые настраиваемые привязки каждому сценарию.

Чтобы «упростить» весь этот процесс, я создал многопроектную сборку Gradle, структурированную так:

automation-package (root project)
|
|------- build.gradle
|------- settings.gradle
|
|-------- jmeter-app
|          |
|          |---- build.gradle
|          |---- build.xml         (JMeter is built with Ant)
|          |---- build.properties  (Ant build properties)
|
|-------- fakeblock-groovy (contains the classes that I want to use inside jmeter code) 
           |
           |---- build.gradle
           |---- src               (Structured like a standard groovy gradle project)
                  |--- main
                  |--- test

Причиной использования этой структуры проекта является то, что я в конечном итоге добавлю больше подпроектов для обработки других вещей, но я готов изменить их, если я лаю не на том дереве

Содержимое скриптов сборки

- пакет автоматизации

//settings.gradle:

include ':jmeter-app'
include ':fakeblock-groovy'
//build.gradle:

plugins {
    id 'idea'
    id 'java'
}

allprojects {
    apply plugin: 'java'

    repositories {
        mavenCentral()
    }
}

project(':fakeblock-groovy') {
    dependencies {
        compile group: 'org.codehaus.groovy', name: 'groovy-dateutil', version: '2.5.5'
        compile 'org.codehaus.groovy:groovy-all:2.5.5'
        compile 'org.apache.commons:commons-text:1.6'
        testCompile 'junit:junit:4.12'
        testCompile 'org.jacoco:org.jacoco.ant:0.8.3'
    }
}

project(':jmeter-app') {
    dependencies {
        implementation project(':fakeblock-groovy')
        implementation fileTree(dir: 'lib', include: ['**/*.jar'])
    }
}

- приложение jmeter

//build.gradle

apply plugin: 'idea'
apply plugin: 'java'

ant.importBuild('build.xml') { antTaskName ->
    "ant-${antTaskName}".toString()
}

idea {
    module {
        sourceDirs += file("$projectDir/src/components")
        sourceDirs += file("$projectDir/src/core")
        sourceDirs += file("$projectDir/src/examples")
        sourceDirs += file("$projectDir/src/functions")
        sourceDirs += file("$projectDir/src/jorphan")
        sourceDirs += file("$projectDir/src/junit")
        sourceDirs += file("$projectDir/src/protocol")
        sourceDirs += file("$projectDir/src/protocol/ftp")
        sourceDirs += file("$projectDir/src/protocol/http")
        sourceDirs += file("$projectDir/src/protocol/java")
        sourceDirs += file("$projectDir/src/protocol/jdbc")
        sourceDirs += file("$projectDir/src/protocol/jms")
        sourceDirs += file("$projectDir/src/protocol/ldap")
        sourceDirs += file("$projectDir/src/protocol/mail")
        sourceDirs += file("$projectDir/src/protocol/mongodb")
        sourceDirs += file("$projectDir/src/protocol/native")
        sourceDirs += file("$projectDir/src/protocol/tcp")
    }
}

sourceSets {
    main {
        java {
            srcDirs = ['src']
        }
    }
}

repositories {
    flatDir {
        name = 'libs dir'
        dir file('lib')
    }
}

Проблема наблюдается

Если я запускаю gradle clean build, тогда все работает без проблем, и кажется, что он делает jar до компиляции jmeter:

[...]
> Task :fakeblock-groovy:compileJava NO-SOURCE
> Task :fakeblock-groovy:compileGroovy
> Task :fakeblock-groovy:processResources NO-SOURCE
> Task :fakeblock-groovy:classes
> Task :fakeblock-groovy:jar

> Task :jmeter-app:compileJava
Processing annotations
Annotations processed
Processing annotations
No elements to process
Note: Some input files use or override a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
Note: Some input files use unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
[...]

Однако, когда я пытаюсь запустить jmeter gui через задачу gradle :jmeter-app:ant-run_gui, сборка завершается неудачно, когда она пытается скомпилировать код с моим пользовательским классом:

> Task :jmeter-app:ant-compile-java FAILED
C:\Users\<username>\Desktop\automation-package\jmeter-app\src\protocol\java\org\apache\jmeter\protocol\java\sampler\JSR223Sampler.java:21: error: package com.fakeblock.logger does not exist
import com.fakeblock.logger.FakeblockLogger;
                             ^
C:\Users\<username>\Desktop\automation-package\jmeter-app\src\protocol\java\org\apache\jmeter\protocol\java\sampler\JSR223Sampler.java:51: error: cannot find symbol
    private static final FakeblockLogger fakeblockLogger = new FakeblockLogger();
                         ^
  symbol:   class FakeblockLogger
  location: class JSR223Sampler
2 errors

FAILURE: Build failed with an exception.

Я могу перейти к источнику для этого класса в IDE, поэтому я уверен, что gradle понимает вещи в основном .

Мое решение

Я могу заставить все работать правильно, если перестану использовать зависимости проекта gradle и вернусь к своей первой реализации, где я создаю задачи gradle для выполнения следующих действий:

1) Убедитесь, что фальшблок-шпунтовый кувшин построен
2) Получить версию jar из файла gradle.properties в подпроекте
3) Скопируйте файл jar в каталог jmeter-app / lib.
4) Добавьте / замените записи jmeter-app / build.properties правильной версией fakeblock-groovy.jar

Затем, если я вручную добавлю строку <include name="${lib.dir}/${fakeblock-groovy.jar}"/> в набор шаблонов 'external.jars' внутри jmeter-app / build.xml, все будет работать правильно, и когда я запущу gradle :jmeter-app:ant-run_gui, я вижу, что мои изменения делают то, что я в розыске. Когда я перехожу к источнику класса в IDE, он открывает декомпилированный источник java из jar-файла в jmeter-app / lib.

Мой вопрос

С моей установкой можно ли заставить работать простые зависимости проекта gradle или мне нужно объединить два моих подхода так, чтобы задача ant-run_gui зависела от задач, обеспечивающих наличие jar внутри jmeter- Каталог app / lib и версия build.properties верны?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...