Gradle JavaFXPorts项目作为其他JavaFXPorts项目的库

Gradle JavaFXPorts项目作为其他JavaFXPorts项目的库,gradle,javafxports,multi-project,Gradle,Javafxports,Multi Project,我目前正在努力解决一个可能非常简单的问题:如何将一个特定于JavaFXPorts的项目用作另一个同类项目中的依赖项 对于纯分离的项目,我不知道如何组合它们(不得不承认,我对Gradle不是最新的,因为我可能需要…) 我考虑使用apply插件:“maven”安装库并从本地maven缓存获取库。但这样就不会分离特定于平台的代码(所有东西——main、android、ios、desktop——都会合并到一个JAR文件中) 也许如果我把问题简化为main源代码树的纯部分,我就可以创建一个独立的JavaF

我目前正在努力解决一个可能非常简单的问题:如何将一个特定于JavaFXPorts的项目用作另一个同类项目中的依赖项

对于纯分离的项目,我不知道如何组合它们(不得不承认,我对Gradle不是最新的,因为我可能需要…)

我考虑使用
apply插件:“maven”
安装库并从本地maven缓存获取库。但这样就不会分离特定于平台的代码(所有东西——main、android、ios、desktop——都会合并到一个JAR文件中)

也许如果我把问题简化为
main
源代码树的纯部分,我就可以创建一个独立的JavaFXOnly项目,这应该很容易

或者我可以通过相对路径访问另一个项目。但无论出于什么原因,我都有点不喜欢这个想法

JavaFXPorts的最佳实践是什么?我只是不知道如何将一些东西反复复制到新项目中(显然)

提前感谢,,
Daniel

这是一个非常简单的示例,说明了如何设置Gradle多项目,其中包含两个子项目:

  • Common
    :一个常规的JavaFX(gradle)项目,其公共代码可在以后的其他项目中重用
  • gloonapplication
    :一个简单的gloonmobile项目,利用普通项目
我已经使用NetBeans创建了Gradle根项目并添加了子项目,但也可以从其他IDE或命令行完成

1.Gradle根项目

创建一个Gradle根项目。设置项目名称(本例中为
GradleProject
)、位置、Maven组ID(本例中为
com.gloonHQ
)和Maven版本(默认值
1.0-SNAPSHOT

2.渐变公共子项目

创建一个新的Gradle子项目。选择一个名称(
Common
),并确保此项目的位置是
GradleProject
文件夹。选择一个主类(
com.gloonhq.Common.Common

添加一些代码:

package com.gluonhq.common;

public class Common {

    public static double sum(double a, double b) {
        return a + b;
    }
}
3.胶子移动子项目

为您的IDE添加带有Glion插件的Glion Mobile子项目。例如,选择单视图项目。选择一个名称(
GluonApplication
),再次确保此项目的位置是
GradleProject
文件夹。选择包名(
com.gluonhq.application
)和主类(
GluonApplication

您可以从项目根目录中的命令行:
gradle:gloonapplication:run
,或者从IDE(任务->运行)按原样运行此项目

4.包括一个通用依赖项

编辑Gluon Mobile子项目中的
build.gradle
文件,并添加公共依赖项

repositories {
    mavenLocal()
    jcenter()
    maven {
        url 'http://nexus.gluonhq.com/nexus/content/repositories/releases'
    }
}

dependencies {
    compile 'com.gluonhq:charm:4.3.7'
    compile 'com.gluonhq:common:1.0-SNAPSHOT'
} 
由于两个子项目都属于同一根项目,您可以简单地执行以下操作:

dependencies {
    compile 'com.gluonhq:charm:4.3.7'
    compile project(":Common")
} 
保存并重新加载项目。现在您可以在代码中调用
Common.sum

button.setOnAction(e -> label.setText("3 + 4: " + Common.sum(3, 4)));
再次运行并查看它是否有效。您也可以部署到移动设备

5.安装通用模块

如果您计划在此或其他Gluon Mobile项目中重用
Common
项目,则可以将其安装在
.m2
存储库中

在命令行上,从项目的根目录运行:

gradle :Common:install
您将看到该项目安装在
/.m2/repository/com/glionhq/common/1.0-SNAPSHOT
下,包括
common-1.0-SNAPSHOT.jar
文件

6.重复使用普通jar

最后,您可以在任何项目中包含公共jar

为此,编辑Gluon Mobile子项目中的
build.gradle
文件,包括本地存储库,并添加公共依赖项

repositories {
    mavenLocal()
    jcenter()
    maven {
        url 'http://nexus.gluonhq.com/nexus/content/repositories/releases'
    }
}

dependencies {
    compile 'com.gluonhq:charm:4.3.7'
    compile 'com.gluonhq:common:1.0-SNAPSHOT'
} 
保存并重新加载项目。您的通用代码将可用


当然,这在您的机器上本地工作,但是您也可以将工件发布到私有或公共repo,然后您应该在上面的列表中包括适当的repo。

对于
main
sourceset,实际上典型的用法是
公共
项目,您可以将其作为Gradle多项目的一部分重用(例如,请参阅),或者作为一个依赖项(首先运行
/gradlew:Common:install
,将其安装到本地repo中),您将像往常一样添加(
compile com.package:Common:1.0
)由于可能不止一个应用程序依赖于此,因此多项目变体很可能不是一个好主意。因此,第二种方法似乎是合理的。你能给我举一个这种解决方案的例子吗,就像你在Devxx应用程序中所做的那样?顺便说一句:研究Devxx项目实际上非常有用!好的提示,José!感谢昨天早上,我终于想出了一个类似的概念,只是做了一些小改动:1)公共项目是一个单独的多项目
Gradle
,其中包含
Kotlin
,2)我需要应用
maven
插件,以访问
安装任务3)需要了解
mavenLocal()
存储库,并且想知道为什么他们将
mavenCentral()
和local分开4)为
JavaFXPorts
测试项目创建了一个单独的
Gradle
项目,这取决于公共资源。如果我要发布我的解决方案,请不要这样做。建议?关于maven插件,我没有发布所有的gradle文件,但事实上它是由NetBeans的gradle插件添加到主项目中的(否则,
install
将不起作用)。好吧,它不在IntelliJ上,但它很快就被Google…;-)