当前位置: 首页 > 知识库问答 >
问题:

当导出为库时,扩展类方法不可用

冯阳成
2023-03-14

我正在尝试构建一个java库(streaming client.jar),并在客户端微服务中使用它。

在这个jar文件中,我有一个POJO类,它扩展了第三方POJO类

 @ConditionalOnClass({Options.class})
 @ConfigurationProperties(prefix = "nats.spring")
 public class ServerProps extends NatsProperties {
 
   public ServerProps(){ super(); }
  }

现在这个< code>NatsProperties类来自第三方库,这个类扩展了另一个自动配置类。

当我在这个库中本地使用ServerProps时,我可以从NatsPropertiessuper类访问方法。

但是当我将这个库导出为jar文件时。并在客户端应用程序中使用它。

< code>NatsProperties方法不能通过< code>ServerProps类使用

在客户端

  ServerProps props = new ServerProps();
  props.server("sdfsfsdfsdf")//server method cant be resolved, 

编辑

我尝试将NatsProperties类中的所有方法添加到我的自定义ClassStreamingServerProperties

然后当我尝试在其他项目中访问它们时,如下所示

   StreamingServerProperties props = new StreamingServerProperties();
   props.server("serverUrl") //Intellij complains that Cannot access io.nats.spring.boot.autoconfigure.NatsProperties

建筑streaming-client.jar的梯度

  plugins {
    id 'java-library'
    id 'maven-publish'
    id "com.github.johnrengelman.shadow" version "7.1.2"
  }

 group = 'com.dexter'
 version = '0.0.1-SNAPSHOT'
 sourceCompatibility = '11'

 repositories {
    mavenCentral()

  }

publishing {
     publications {
          mavenJava(MavenPublication) {
                from components.java
                versionMapping {
                    usage('java-api') {
                        fromResolutionOf('runtimeClasspath')
                    }
               usage('java-runtime') {
                   fromResolutionResult()
               }
            }
         }
     }
   }
  tasks.named('compileJava') {
        inputs.files(tasks.named('processResources'))
  }
 dependencies {
     implementation 'io.nats:nats-spring:0.5.6'
     testImplementation 'org.junit.vintage:junit-vintage-engine:5.9.0'
     testImplementation 'org.springframework.boot:spring-boot-starter-test:2.6.3'
     testImplementation 'org.junit.jupiter:junit-jupiter-engine:5.9.0'
     testImplementation 'org.junit.platform:junit-platform-engine:1.9.0'
        testImplementation 'org.junit.platform:junit-platform-launcher:1.8.2'
    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.9.0'
    implementation('np.com.madanpokharel.embed:nats-embedded:2.1.0')
   }

  tasks.named('test') {
   useJUnitPlatform()
 }

我正在使用<代码>。/gradlew build任务生成一个jar,使用这个jar,我无法获取< code>NatsProperties类方法。

但是,如果我从这个影子插件中使用fatJar任务,我能够获得这些方法,但问题是它创建了所有库并且大小太大了。

共有2个答案

慕弘深
2023-03-14

我能够通过将依赖项添加为api来解决它。

而不是

   implementation 'io.nats:nats-sprin:0.5.6' // this adds to runtimeclass path

我试过了

   api 'io.nats:nats-sprin:0.5.6' //this adds to both compile and runtime

因为我正在使用java-Librarygradle插件。

郭博涉
2023-03-14

你能添加这个依赖项,以便intellij在target中为你生成配置元数据吗?

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>
 类似资料:
  • 验证码生成 缓存支持

  • 问题内容: 我正在学习Java,并且希望将自己的课堂变成可观察的课堂。 但是我已经有了它扩展了另一个类。 我该怎么办? 问题答案: 我建议避免完全使用该类,而应 定义事件特定的侦听器和相应的事件定义 。然后在您的类中定义一个侦听器列表,以及添加和删除侦听器以及向其传播事件的方法(请参见下文)。 强制您使用它来表示事件,然后使用来检查事件类型,这是一种丑陋的非OO方法,并使代码更难以理解。如果查看j

  • 我在使用上找到的wenzhixin引导表的可编辑扩展时遇到一些问题https://github.com/wenzhixin/bootstrap-table/tree/master/src/extensions/editable.我刚刚决定使用此扩展,因为我在项目中已经将引导表用于其他目的。使用此可编辑扩展时,我在Chrome上遇到以下控制台错误: 我无法理解可能是什么问题。我试着在网站上查看文档和

  • 问题内容: 为什么上面的代码片段是错误的? 问题答案: 我将尝试结合其他答案中的想法来提出一个答案。 首先,让我们看一下代码中正在发生的事情。 看一下代码 本类有一个包私有方法: 在该子类的类的类,并且所述方法是被覆盖的,但具有访问修饰符。 问题 Java语言不允许子类降低子类中方法,字段或类的可见性,因此,降低该方法可见性的类是不合法的。 为什么降低可见度是一个问题? 考虑我们要使用该类的情况:

  • 本文向大家介绍MFC扩展DLL中导出类和对话框的实现方法,包括了MFC扩展DLL中导出类和对话框的实现方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了MFC扩展DLL中导出类和对话框的实现方法,分享给大家供大家参考。具体实现方法如下: 一般来说,如果要编写模块化的软件,就要对对动态链接库(DLL)有一定的了解,本人这段时间在修改以前的软件时,决定把重复用的类和对话框做到DLL中,下面就

  • 问题内容: 创建数组时,无法更改其大小;它是固定的。好的,看起来不错,我们可以创建一个新的更大的数组并逐个复制值,这有点慢。它的技术背景是什么? 问题答案: 这个问题没有提到语言,因此我将选择基于“ C”的数组作为答案。 数组被分配为单个内存块。增长数组是有问题的,因为正确执行此操作的唯一方法是在最后增长它。为了增加大小N,在数组的末尾必须在下一个分配的地址之前至少有N个空闲字节。 要支持这种类型