小编Izb*_*gen的帖子

Maven标准化了对多版本罐子的支持

Java 9与JEP-238一起发布,它基本上允许我们发布多个版本的运行时类.问题是maven如何支持这个JEP?

  • 我的意思是在maven中配置多个版本的方式和位置?我知道我可以运行一个ant任务,但是我可以用maven-compiler插件或其他标准方式来做吗?
  • 我应该在哪里以及如何放置不同版本的java类?JEP正在限制已编译的类文件并告诉我们应该将它放在jar中的位置但是开发呢?

maven java-9

6
推荐指数
1
解决办法
1080
查看次数

如何在Windows上硬编码maven使用的java

我知道maven使用JAVA_HOME环境变量来启动自身。但由于缺乏管理权限(公司的安全政策),我无法更改该变量。我安装了 Oracle JRE,目前由 Maven 使用。我在 Windows 10 上运行。

我想对我的 Maven 进行硬编码以使用特定的 JDK 文件夹以便自行运行。我正在研究的一个解决方案是将其硬编码到$MAVEN_HOME\bin\mvn文件中,但我不能这样做。当我尝试添加类似内容时:

set JAVA_HOME="E:\ProgramFiles\java\jdk8"
export JAVA_HOME="E:\ProgramFiles\java\jdk8"
JAVA_HOME=`E:\ProgramFiles\java\jdk8`
Run Code Online (Sandbox Code Playgroud)

在该文件中,它仍然指向已安装的 JRE,正如我从mvn -version命令的输出中看到的那样。

Apache Maven 3.5.0 (ff8f5e7444045639af65f6095c62210b5713f426; 2017-04-03T22:39:06+03:00) Maven home: E:\ProgramFiles\apache-maven-3.5.0\bin\.. Java version: 1.8.0_131, vendor: Oracle Corporation Java home: C:\Program Files\Java\jre1.8.0_131 Default locale: ru_RU, platform encoding: Cp1251 OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"

问题是:我需要如何更改我的mvnmvn.cmd文件$MAVEN_HOME\bin才能使用所需的硬编码 JDK 版本?或者除了更改环境变量之外还有其他解决方案(因为我需要mvn从任何地方运行命令 - 并且它需要使用特定的 jdk)?

java maven

5
推荐指数
1
解决办法
2484
查看次数

在延迟流中,保留共享意味着什么?

我正在关注《 Scala中的函数编程》一书。这是Stream定义和函数的代码片段,这些代码片段constant使用智能构造函数并使用来构造unfold

sealed trait Stream[+A]
case object Empty extends Stream[Nothing]
case class Cons[+A](h: () => A, tl: () => Stream[A]) extends Stream[A]

object Stream {
  def cons[A](h: => A, tl: => Stream[A]): Stream[A] = {
    lazy val head = h
    lazy val tail = tl
    Cons(() => head, () => tail)
  }
  def empty[A]: Stream[A] = Empty

  def constant[A](a: A): Stream[A] = cons(a, constant(a))

  def unfold[A, S](z: S)(f: S => Option[(A, S)]): Stream[A] =
    f(z).fold(empty[A])(x => …
Run Code Online (Sandbox Code Playgroud)

functional-programming scala

5
推荐指数
1
解决办法
119
查看次数

如何通过构造函数注入来限定 bean

我有一个在两个地方定义的接口:

@Configuration
public class AppContext {
    @Bean
    public SomeInterface usageOne() {
        return new SameImpl();
    }

    @Bean
    public SomeInterface usageTwo() {
        return new SameImpl(someOtherConfig);
    }

    @Bean
    public Client clientOne(SomeInterface usageOne) {
        return new Client(usageOne);
    }

    @Bean
    public OtherClient clientTwo(SomeInterface usageTwo) {
        return new OtherClient(usageTwo);
    }
}
Run Code Online (Sandbox Code Playgroud)

我的客户端实现类没有任何注释,仅需要构造函数。在这种情况下如何限定正确的接口实现用法?我不想使用,@Primary因为在我的情况下,将其中一种用法命名为主要用法在语义上是不正确的(它们在某种意义上是相等的)。我需要传递具有相同实现类的相同接口,但针对受人尊敬的客户端的特定用例进行了不同的配置。我认为命名参数来将实现注入到 bean 创建方法就足够了,但是 Spring 抱怨:required a single bean, but 2 were found。我不明白我应该如何使用@Qualifier注释。

我正在使用 Spring Boot 2.0.4.RELEASE 运行,并在单独的配置类中创建受尊重的 bean 和客户端,因此我不能usageTwo()在创建时只调用方法OtherClientnew OtherClient(usageTwo());因为此方法在客户端配置类中不可用。

java spring spring-boot

4
推荐指数
1
解决办法
4648
查看次数

如何在 Gradle 中使用 pom 类型依赖

我需要从我的 pom 类型的 Java 库生成传递依赖。这是我如何做的一个例子:

plugins {
  `java-library`
  `maven-publish`
}
repositories {
  // some maven repo
}
dependencies {
  // This is POM type dependency:
  api("org.apache.sshd:apache-sshd:1.6.0") {
    exclude(group = "org.slf4j")
  }
}
publications {
  create<MavenPublication>("maven") {
    from(components["java"])
  }
}
Run Code Online (Sandbox Code Playgroud)

此配置的问题在于,在pom.xml我的库的已发布中,依赖项属于类型jar(默认情况下)并声明如下:

<dependency>
  <groupId>org.apache.sshd</groupId>
  <artifactId>apache-sshd</artifactId>
  <version>1.6.0</version>
  <!-- Should declare pom type -->
  <scope>compile</scope>
  <exclusions>
    <exclusion>
      <artifactId>*</artifactId>
      <groupId>org.slf4j<groupId>
    </exclusion>
  </exclusions>
</dependency>
Run Code Online (Sandbox Code Playgroud)

因此,当我尝试从另一个项目使用我发布的库时,它失败了,因为没有这样的工件,apache-sshd因为它的类型应该是pom. 那么如何使用 Gradle 正确发布所需的依赖项呢?

使用 Kotlin DSL 在 Gradle 5.3.1 上运行。

gradle gradle-kotlin-dsl

4
推荐指数
1
解决办法
4982
查看次数

如何在 Kotlin 中替换用于读取字节的阻塞代码

我有一个ktor应用程序,它需要像这样的代码中的 multipart 文件:

multipart.forEachPart { part ->
  when (part) {
    is PartData.FileItem -> {
      image = part.streamProvider().readAllBytes()
    }
    else -> // irrelevant
  }
}    
Run Code Online (Sandbox Code Playgroud)

Intellij IDEA 标记readAllBytes()为不适当的阻塞调用,因为 ktor 在协程之上运行。如何将此阻塞调用替换为适当的调用?

kotlin ktor kotlin-coroutines

3
推荐指数
1
解决办法
2736
查看次数

为什么函数是Haskell中的第一个参数

我开始学习Haskell。我很好奇为什么在Haskell中将函数作为列表的高阶函数的第一个参数。例如,这是对的定义map

map :: (a -> b) -> [a] -> [b]
Run Code Online (Sandbox Code Playgroud)

这意味着我可以像这样以前缀或运算符形式使用它:

-- yields [3,5,7]
map (+ 2) [1,3,5]
-- we can chain like that
filter (< 4) (map (+ 2) [1,3,5])

-- or in operator form 
(+ 2) `map` [1,3,5]
(< 4) `filter` ((+ 2) `map` [1,3,5])
Run Code Online (Sandbox Code Playgroud)

在Scala中,可以这样写:

List(1,3,5) map (_ + 2)
// we can chain as follows:
List(1,3,5) map (_ + 2) filter (_ < 4)
Run Code Online (Sandbox Code Playgroud)

因此顺序颠倒了,我们将函数作为第二个参数。Haskell中参数排序的原因是什么?

haskell functional-programming

2
推荐指数
1
解决办法
165
查看次数

如何在 Kotlin 的 Ktor 中提取访问权限验证

我有基于 Ktor 的 REST API 应用程序,它使用jwt令牌作为身份验证。然后我必须限制特定角色的某些路由。为了做到这一点,我正在创建主体,其中包含相关信息:

data class UserPrincipal (
  val id: Long,
  val username: String,
  val roleId: Long,
): Princpal {
  override fun getName() = username
}

object AuthLogin {
  fun Application.auth(jwt: JwtProvider) {
    install(Authentication) {
      jwt("jwt") {
        realm = jwt.realm()
        verifier(jwt.verifier())
        validate {
          val userId = it.payload.getClaim("id").asLong()
          val username = it.payload.getClain("name")
          val roleId = it.payload.getClaim("roleId").asLong()
          UserPrincipal(userId, username, roleId)
        }
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

当签署正确登录的用户时,将提供带有userId和的声明。roleId现在我可以像这样限制 REST 端点:

object RestModule {
  fun Application.enititiesOne(userRepo: UserRepo) …
Run Code Online (Sandbox Code Playgroud)

kotlin ktor

2
推荐指数
1
解决办法
1646
查看次数

如何为 go get 命令指定 dns

我有一个依赖项,它发布在公司的 GitLab 中,并且只能通过某个 dns 服务器的域名来发现。该go get命令无法获取对我的本地环境的依赖,如下所示:

go get our-domain.com/group/library@v0.1.0                                            
go: our-domain.com/group/library@v0.1.0: verifying go.mod: our-domain.com/group/library@v0.1.0/go.mod: reading https://sum.golang.org/lookup/our-domain.com/group/library@v0.1.0: 410 Gone
        server response: not found: our-domain.com/group/library@v0.1.0: unrecognized import path "our-domain.com/group/library": https fetch: Get "https://our-domain.com/group/library?go-get=1": dial tcp: lookup our-domain.com on 8.8.8.8:53: no such host
Run Code Online (Sandbox Code Playgroud)

如果我在 docker 内部构建并添加 dns ,它会起作用/etc/docker/daemon.json

{ "dns": ["1.2.3.4"] }
Run Code Online (Sandbox Code Playgroud)

如何在本地获得依赖?使用 go1.13 在 MacO 上运行

我尝试将 DNS 地址添加到网络设置,但go get仍然无法使用。

dns go go-modules

1
推荐指数
1
解决办法
1834
查看次数

在PL / SQL过程中打开动态表名称的游标

我想创建将使用游标的过程,这与任意表相同。我当前的样子是这样的:

create or replace
  PROCEDURE
    some_name(
      p_talbe_name IN VARCHAR2,
      p_chunk_size IN NUMBER,
      p_row_limit IN NUMBER
    ) AS

  CURSOR v_cur IS
     SELECT common_column,
       ora_hash(substr(common_column, 1, 15), p_chunk_size) as chunk_number
     -- Here it can find the table!
     FROM p_table_name;

  TYPE t_sample IS TALBE OF v_cur%rowtype;
  v_sample t_sample;
BEGIN
  OPEN v_cur;
  LOOP FETCH v_cur BULK COLLECT INTO v_sample LIMIT p_row_limit;
    FORALL i IN v_sample.first .. v_sample.last
    INSERT INTO chunks VALUES v_sample(i);
    COMMIT;
    EXIT WHEN v_cur%notfound;
  END LOOP;
  CLOSE v_cur;
END;
Run Code Online (Sandbox Code Playgroud)

问题是它找不到p_table_name我要参数化的命名表。问题是,我需要基于 …

oracle plsql

0
推荐指数
1
解决办法
405
查看次数