【问题标题】:JavaFXPorts project as a library for other JavaFXPorts projectsJavaFXPorts 项目作为其他 JavaFXPorts 项目的库
【发布时间】:2017-09-11 14:18:17
【问题描述】:

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

对于纯粹分离的项目,我不知道如何将它们组合起来(不得不承认,我没有像 Gradle 那样最新,因为我可能需要......)。

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

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

或者我可以通过相对路径访问另一个项目。但无论出于何种原因,我有点不喜欢这个主意。

JavaFXPorts 的最佳实践是什么?我只是不想一遍又一遍地将一些东西复制到新项目中(显然)。

提前致谢, 丹尼尔

【问题讨论】:

  • 对于main 源集,确实典型的使用是Common 项目,您可以将其作为Gradle 多项目的一部分(例如参见the Devoxx App)或作为一个依赖项(首先运行 ./gradlew :Common:install 以将其安装在本地存储库中),您将照常添加 (compile com.package:common:1.0)
  • 由于可能不止一个应用程序依赖于此,多项目变体很可能不是一个好主意。所以第二种方法似乎是合理的。您能否像使用 Devoxx 应用程序那样为这种解决方案举个例子?
  • 顺便说一句:研究 Devoxx 项目实际上很有帮助!好建议,何塞!

标签: gradle javafxports multi-project


【解决方案1】:

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

  • Common:一个常规的 JavaFX (gradle) 项目,具有可以在以后在其他项目中重用的通用代码。
  • GluonApplication:一个简单的 Gluon Mobile 项目,它使用了通用的。

我使用 NetBeans 创建了 Gradle Root 项目并添加了子项目,但也可以从其他 IDE 或命令行完成。

1. Gradle 根项目

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

2。 Gradle 通用子项目

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

添加一些代码:

package com.gluonhq.common;

public class Common {

    public static double sum(double a, double b) {
        return a + b;
    }
}

3. Gluon 移动子项目

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

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

4.包含公共依赖项

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

由于两个子项目属于同一个根项目,您可以简单地这样做:

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

您会看到项目安装在<user>/.m2/repository/com/gluonhq/common/1.0-SNAPSHOT 下,包括common-1.0-SNAPSHOT.jar 文件。

6.重用 Common jar

最后,您可以在任何项目中包含通用 jar。

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

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'
} 

保存并重新加载项目。并且您的通用代码将可用。

当然,这可以在您的机器上本地工作,但您也可以将工件发布到私有或公共仓库,然后您应该只在上述列表中包含正确的仓库。

【讨论】:

  • 感谢您的努力,何塞。昨天早上我终于想出了一个类似的概念,只是做了一些小改动:1) 普通项目是一个单独的多项目Gradle 设置,其中包含Kotlin2) 我需要应用maven 插件,才能访问install 任务3) 需要了解mavenLocal() 存储库并想知道为什么他们将 mavenCentral() 和本地 4) 分开,为 JavaFXPorts 测试项目创建了一个单独的 Gradle 项目,具体取决于公共内容。不要,如果我应该发布我的解决方案。有什么建议吗?
  • 关于maven插件,我没有贴出所有的gradle文件,但确实是由NetBeans的gradle插件添加到主项目中的(否则install不起作用)。
  • 好吧,它不在 IntelliJ 上,但谷歌很快就找到了……;-)
猜你喜欢
  • 1970-01-01
  • 2016-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多