Вот пример использования контроллера, введенного Guice.
/**
* Loads a FXML file and injects its controller from the given Guice {@code Provider}
*/
public abstract class GuiceFxmlLoader {
public GuiceFxmlLoader(Stage stage, Provider<?> provider) {
mStage = Objects.requireNonNull(stage);
mProvider = Objects.requireNonNull(provider);
}
/**
* @return the FXML file name
*/
public abstract String getFileName();
/**
* Load FXML, set its controller with given {@code Provider}, and add it to {@code Stage}.
*/
public void loadView() {
try {
FXMLLoader loader = new FXMLLoader(getClass().getClassLoader().getResource(getFileName()));
loader.setControllerFactory(p -> mProvider.get());
Node view = loader.load();
setViewInStage(view);
}
catch (IOException ex) {
LOGGER.error("Failed to load FXML: " + getFileName(), ex);
}
}
private void setViewInStage(Node view) {
BorderPane pane = (BorderPane)mStage.getScene().getRoot();
pane.setCenter(view);
}
private static final Logger LOGGER = Logger.getLogger(GuiceFxmlLoader.class);
private final Stage mStage;
private final Provider<?> mProvider;
}
Вот конкретная реализация загрузчика:
public class ConcreteViewLoader extends GuiceFxmlLoader {
@Inject
public ConcreteViewLoader(Stage stage, Provider<MyController> provider) {
super(stage, provider);
}
@Override
public String getFileName() {
return "my_view.fxml";
}
}
Обратите внимание, что этот пример загружает представление в центр BoarderPane, который является корнем сцены в рабочей области. Это не относится к примеру (деталь реализации моего конкретного варианта использования), но решил оставить его, поскольку некоторые из них могут оказаться полезными.
Проблема заключается в cordova-support-google-services
плагин для Cordova.
Этот плагин build.gradle
похож на это с сегодняшнего дня (24-го октября 2019):
dependencies {
classpath 'com.android.tools.build:gradle:+'
classpath 'com.google.gms:google-services:4.2.0'
}
более точно проблема заключается в этой зависимости:
classpath 'com.android.tools.build:gradle:+'
, Который является чрезвычайно хрупким способом определить зависимости. '+' знак здесь означает, "выбирают новую версию, доступную в repo". Если более новая версия публикуется в repo, и это повреждает сборку, то всем с этим плагином повредили их проекты. Сегодня это произошло. Поврежденная версия, которая выбирается, com.android.tools.build:gradle:4.0.0
. Требуется некоторый материал Kotlin.
Именно поэтому необходимо ВСЕГДА замораживать зависимости для надежного разрабатывания проекта. Никогда не доверяйте более новому материалу. Эти компиляции зависимости, прекрасные, как это вчера сделало:
classpath 'com.android.tools.build:gradle:3.5.1'
Для тех, которые используют Cordova или ионический диалект, можно сделать быстрое исправление, чтобы быть в состоянии разработать проект путем замораживания зависимости в файле:
<projectroot>/platforms/android/cordova-support-google-services/<project>-build.gradle
Это не категорическое решение все же. При переустановке платформы андроида через Cordova, ошибка обнаружится снова. Специалист по обслуживанию проекта должен или заморозить зависимость или зафиксировать ее для поддержки gradle 4.0.0. Тем временем просто используйте фиксированное ветвление этого плагина.
Вот решение.
проблемой был точно репозиторий знатока ( здесь ), но проблема была с build.gradle от плагин cordova-support-google-services, таким образом, я добавил необходимую строку, и все в порядке теперь, я уже создал запрос получения по запросу к исходному repo ( здесь ). Но тем временем можно сделать то, что я сделал, просто замените в package.json текущий versiГіn с моим repo:
Прежде:
...
"cordova-support-google-services": "^1.3.1",
...
После:
...
"cordova-support-google-services": "https://github.com/LuisEGR/cordova-support-google-services.git",
...
после этого Вы будете иметь к:
npm install
, Это - временное решение, в то время как запрос получения по запросу к основному repo принят, и npm пакет обновил
и вот именно, теперь можно разработать проект снова.
<час> я использую ионические 4, и некоторые плагины требуют cordova-support-google-services
, в случае, если у Вас нет его в Вашем package.json, ошибка могла быть с другим плагином, раз так добавьте package.json, таким образом, мы можем узнать, какой является проблемой.
ОБНОВЛЕНИЕ 24/ОКТЯБРЬ:
я изменил решение в своем repo как многие из Вас предложенный, теперь решение consinst только в фиксации зависимости: от: com.android.tools.build:gradle: + к пути к классу com.android.tools.build:gradle:3. + , это уже находится в моем repo, если Вы хотите видеть , что изменилось
cordova-support-google-services был обновлен сегодня к версии 1.3.2, которая изменяет путь к классу от classpath 'com.android.tools.build:gradle:+'
к
classpath 'com.android.tools.build:gradle:3.+'
, который, кажется, фиксирует kotlin ошибку
, я заставил мой создавать успешно путем выполнения следующего:
я отредактировал платформы-> андроид-> cordova-support-google-services-> myAppName-build.gradle
и изменился
maventCentral()
к [1 116]
maven { url "https://maven.google.com" }
maven { url 'https://dl.bintray.com/kotlin/kotlin-eap' }
, Который решил kotlin ошибку тогда, я получал другую ошибку, которую я разрешил путем изменения
classpath 'com.google.gms:google-services:4.2.0'
к [1 118]
classpath 'com.google.gms:google-services:4.1.0'
, Это тогда создало успешно.
Как дальнейшее временное приспособление к продолжению на предложение от @MisterSmith, используйте рычаг, чтобы повторно применить блокировку:
<hook src="scripts/fix_android_dep.sh" type="after_platform_add"/>
с этим чрезмерно многословным кодом удара:
#!/usr/bin/env bash
## temporary fix for android studio EAP issue
## SOURCE: https://stackoverflow.com/a/58536638/56545
if [ -d "platforms/android/cordova-support-google-services" ]; then
file="platforms/android/cordova-support-google-services/app-build.gradle"
from="classpath 'com.android.tools.build:gradle:+'"
to="classpath 'com.android.tools.build:gradle:3.5.1'"
change=`sed "s/$from/$to/" < "$file"`
echo "$change" > "$file"
fi
Решение для ионного v3 и решение cordova
@Mister Smith решили мою проблему
, необходимо перейти к файлу
platforms/android/cordova-support-google-services
тогда
Замена
classpath 'com.android.tools.build:gradle:+'
[1 110]
classpath 'com.android.tools.build:gradle:3.5.1'
@Alternative решение, которое я нашел, к [1 111]
setup kotlin in your system :)
в моем проекте я фиксирую как это. (мой проект в kotlin)
buildscript{
repositories {
google()
jcenter()
......
maven { url 'https://dl.bintray.com/kotlin/kotlin-eap' }
}
}
allprojects {
repositories {
google()
jcenter()
......
maven { url 'https://dl.bintray.com/kotlin/kotlin-eap' }
}
}
Ни одно из вышеупомянутого не работало на меня. Я закончил тем, что удалил плагин сервисов Google, и добавьте его.
cordova plugin rm cordova-support-google-services
cordova plugin add cordova-support-google-services
Я должен был добавить maven { url 'https://dl.bintray.com/kotlin/kotlin-eap' }
и на верхний уровень build.gradle
и на app
модуль build.gradle
. В обоих случаях и в buildscripts.repositories
и в allprojects.repositories