Java 9与JEP-238一起发布,它基本上允许我们发布多个版本的运行时类.问题是maven如何支持这个JEP?
我知道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"
问题是:我需要如何更改我的mvn或mvn.cmd文件$MAVEN_HOME\bin才能使用所需的硬编码 JDK 版本?或者除了更改环境变量之外还有其他解决方案(因为我需要mvn从任何地方运行命令 - 并且它需要使用特定的 jdk)?
我正在关注《 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) 我有一个在两个地方定义的接口:
@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()在创建时只调用方法OtherClient:new OtherClient(usageTwo());因为此方法在客户端配置类中不可用。
我需要从我的 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 上运行。
我有一个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 在协程之上运行。如何将此阻塞调用替换为适当的调用?
我开始学习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中参数排序的原因是什么?
我有基于 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) 我有一个依赖项,它发布在公司的 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仍然无法使用。
我想创建将使用游标的过程,这与任意表相同。我当前的样子是这样的:
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我要参数化的命名表。问题是,我需要基于 …