问题标签 [pf4j]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1407 浏览

java - Spring Data 异常触发 MongoRepository init

将pf4jSpring Data一起使用时出现异常。

我的项目结构是一个 Web 应用程序org.home.server.communication (war),它部署到 Tomcat 中并使用Spring MVC。它加载了一个pf4j插件 - org.home.server.core (jar)。它工作得很好,直到我尝试在org.home.server.core (插件项目)中使用spring-data-mongodb并尝试使用MongoRepository / CrudRepository / Repository

在插件构造函数中,我这样做:

但是当我在插件应用程序中定义任何存储库并尝试从我的主应用程序启动它时,它会崩溃。这是存储库示例:

当我不使用pf4j和 jsut 将 jar 作为独立应用程序运行时,一切正常。所以,我认为问题不在于Spring Framework。也许有人已经尝试在pf4j中使用Spring-DataRepositories并且遇到了这个问题。

也许有人可以指出我下一步该往哪里看?

0 投票
2 回答
483 浏览

java - @SpringBean 对子 ApplicationContext 中的 bean 的支持

我正在与PF4J(Java 插件框架)的开发人员合作,为 Wicket 提供更好的插件功能。已经有一个 pf4j-spring 和一个 pf4j-wicket 项目来提供一些基本的集成。为了允许@SpringBean 或@Inject 注释能够访问子上下文中的插件bean,我们需要能够查找与特定类关联的ApplicationContext。

例如,假设我在子(插件)ApplicationContext 中有一个 MyService bean,并且该插件还通过 @SpringBean 注释提供了一个需要它的面板。Spring 不允许父 ApplicationContext 在子上下文中查看 bean,这是有充分理由的。所以我们会得到一个异常,说找不到bean,因为@SpringBean 只在父上下文中查找bean。我们有我们开发的代码来查找子上下文,如下所示:

如何在自定义版本的 SpringComponentInjector 中修改或提供此功能?它使用 ISpringContextLocator,但该上下文定位器没有指定它需要 ApplicationContext 的类。

关于如何实现这一点的任何想法?

谢谢你的帮助!

0 投票
1 回答
3612 浏览

maven-3 - maven-assembly-plugin 和 maven-jar-plugin 的执行顺序

我对 maven-assembly-plugin 和 maven-jar-plugin 的执行顺序有疑问。我想要做的是为pf4j框架(java 的插件框架)组合一个 uberjar 文件。为此,我需要首先组装所有具有依赖关系的代码,然后将 jar 与清单文件一起打包,该清单文件具有pf4j框架所需的一些特定条目。在“更改 maven 插件执行顺序”的问题 中,我在答案中读到绑定到同一阶段的插件顺序由 pom.xml 文件中声明的顺序定义。现在我有以下 pom.xml 文件:

从 pom.xml 文件中应该清楚我想在maven-assembly- plugin之后运行maven-jar- plugin 。但相反,我得到以下 Maven 输出:

现在从输出可以看出 maven-jar-plugin 在 maven-assembly-plugin 之前执行,这不是我想要的。这样一个命令的效果是一个只有 MANIFEST_INF 内容的 jar 文件。

有人可以解释一下我在这里做错了什么吗?

0 投票
1 回答
369 浏览

java - PF4J 抛出“插件版本不能为空”

我按照github 自述文件中的描述设置了一个 PF4J 插件,但没有使用 maven。

我收到以下错误:

但我的 MANIFEST.MF 显然包含一个插件版本:

我还添加了 Java SemVer v0.9.0

可能是什么问题呢?

更新:我将 Plugin-Version 行放在清单文件的顶部,现在它似乎可以工作了..

0 投票
1 回答
469 浏览

java - 我的 JAVA 应用程序的外部插件框架

我使用 SPRING 和 MongoDB 构建了一个大型 JAVA Web 应用程序,在某些情况下,我希望允许我的用户上传自己的代码,并且该应用程序稍后会在需要时运行它。我把这个操作称为“插件框架”,插件当然是用户的代码,我现在更喜欢在 NodeJS 中。

有没有为此目的推荐/已知的架构?我读过pf4jsenecajs,但它们与我的需求完全不同。

谢谢!

0 投票
0 回答
427 浏览

maven - Gradle build - compileJava 错误 - 无法访问详细错误

我使用 gradle 作为构建服务的 pf4j 插件框架构建了一个 java 应用程序。最初一切都很好。由于我迁移到具有 JDK10 的新机器,并且可能在 gradle 或其他任何其他安装属性上,构建失败。发生“编译错误”。因此,我克隆并尝试构建 pf4j 演示项目。同样的错误。不幸的是,无论我尝试什么,我都无法看到初始编译错误。

使用 mvn clean install 我看到:

使用gradle(有和没有eclipse)我得到:

我能做些什么?

0 投票
0 回答
135 浏览

rest - RequestMappingHandlerMapping afterPropertiesSet 方法导致二义映射

我正在尝试使用 PF4J 库在运行时创建一个端点。我已经设法在启动时加载具有其他 API 功能的插件,但现在我尝试在运行时安装插件时在运行时映射端点。我尝试使用 RequestMappingHandlerMapping 对象中的 afterPropertiesSet() 方法,但似乎核心 Spring Boot 应用程序中的现有端点被覆盖/复制。但是,插件中的端点正在正常工作。来自核心 Spring Boot 应用程序的端点似乎不起作用。

当尝试调用核心端点时,这会导致映射错误的模棱两可的方法。堆栈跟踪可以在下面找到。

下面的代码是我用来在运行时动态注册端点的代码:

基本上,它只是从正在加载(安装和启动)的插件代码中生成 bean,然后它尝试使用 afterPropertiesSet() 方法映射端点

资料来源:https ://stackoverflow.com/a/39671540/9627948

0 投票
0 回答
103 浏览

java - 如何使用 SPI 扩展处理与我的 Java 应用程序的版本冲突

我正在为 Java 应用程序编写插件 API,其想法是最终第三方将为应用程序提供他们自己的插件扩展,而用户需要做的就是将插件 jar 放入应用程序的插件目录中。对于不耐烦的人,简而言之,我的问题是当插件与系统上的 API 不同时,如何处理可能的版本冲突,请参阅下文了解我的情况和我的想法的详细信息。

我已经阅读了许多使用服务提供者接口的文章,并且有一些与之相关的东西。当考虑如何处理不同的版本组合时,问题就来了。

我知道在向 API 添加扩展接口时添加扩展接口而不是更改现有接口的技术(例如,具有 MyInterface 的 API 1.0、使用新方法添加 MyInterface2 的 API 1.1 等)。使用这种技术,如果用户拥有最新的 API,那么旧的插件应该可以正常工作,但是如果用户拥有旧的 API 和更新的插件会发生什么?

因此,作为一个示例,用户只有带有 MyInterface 的 API 1.0,但安装了针对 API 1.1 编译的二进制插件,其中提供程序类实现了 MyInterface2。虽然应用程序可能只使用 MyInterface 调用插件,但如果插件在内部调用 MyInterface2 会发生什么?这是否会导致错误或异常以及何时(即加载类或调用 MyInterface2 的方法时)。这个标准也是跨 JVM 的,还是可能因使用的 JVM 而异?

最后,使用插件框架会更好吗,可以检查版本要求吗?搜索互联网,我在 github 上找到了 PF4J。快速查看源代码似乎表明它可能支持某种版本检查。

0 投票
1 回答
858 浏览

java - 为什么 pluginManager.getExtensions 的结果为空?

尝试使用 PF4J 时,我创建了必要的部分,如

https://github.com/pf4j/pf4j

  1. 扩展 ExtensionPoint 的接口
  2. 一个插件
  3. 带有清单的罐子
  4. 插件加载和激活

为什么 clickHandlers 列表是空的?

我已经使用 JUnit 测试对此进行了测试,我可以在其中调试似乎工作正常的其他部分。请参阅下面的调试日志。

我还查看了https://github.com/pf4j/pf4j/issues/21并激活了 Eclipse 注释处理,但没有任何积极影响。

1.扩展扩展点的接口

2.一个插件

3. 带有清单的罐子

4.插件加载和激活

调试日志

'

0 投票
3 回答
584 浏览

java - 在构建一个非常简单的 PF4J 插件时,我的 extension.idx 文件是空的。为什么?

我正在尝试在现有代码库中使用 PF4J。我试图将所有必要的东西从演示插件和应用程序转移到我现有的 maven 项目中。我已经比较了演示和我的代码,我找不到任何不同的地方。然而,当我构建插件的 .jar 文件时,生成的 extensions.idx 中有一条注释说它是由 PF4J 生成的,但其他地方是空的。那里应该有对我插件的内部类的引用,但没有。在演示插件中,有。

我猜这是我的 Maven 设置(我的 pom 文件之一)的问题,但我看了又看,无法弄清楚。这是我的插件的 Java 文件:

我的猜测是我的代码没有被扫描以找到 @Extension 注释。我不知道那是怎么回事。

我希望其他人已经遇到了这个问题,并且知道我错过了一些简单的事情。谁能告诉我为什么会这样?如果有人可以让我深入了解 Maven 是如何在它生成的 .jar 文件中创建 extensions.idx 文件的,那可能会让我得到答案。

TIA 寻求帮助!