dependencyManagement和之间有什么区别dependencies?我在Apache Maven网站上看过这些文档.似乎dependencyManagement可以在其子模块中使用在其下定义的依赖项而不指定版本.
例如:
父项目(Pro-par)在以下内容下定义依赖项dependencyManagement:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8</version>
</dependency>
</dependencies>
</dependencyManagement>
Run Code Online (Sandbox Code Playgroud)
然后在Pro-par的孩子,我可以使用junit:
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
</dependencies>
Run Code Online (Sandbox Code Playgroud)
但是,我想知道是否有必要在父pom中定义junit?为什么不直接在所需的模块中定义它?
有一个 Git 分支在关闭合并请求时被 GitLab 删除。我想恢复(取消删除)该分支;但是,我在用户界面中没有看到执行此操作的选项。
在 GitHub 中,可以在事后恢复由拉取请求删除的分支(通过拉取请求上的“恢复分支”按钮)。我想知道 GitLab 是否有用于关闭合并请求的类似功能。
我当然可以通过 Git 命令行手动执行此操作,检查已删除分支的最后提交哈希,并将其推回到已删除分支名称。但是,如果存在这样的用户界面,我宁愿使用它。
如何恢复 GitLab 在关闭合并请求时删除的分支?
Julia 文档似乎在何时使用类型注释方面存在冲突。
来自类型文档:
该
::运算符可用于将类型注释附加到程序中的表达式和变量。这样做有两个主要原因:
- [...]
- 向编译器提供额外的类型信息,这可以在某些情况下提高性能。
来自性能提示:
如果类型是抽象的或在运行时构造的,类型注释不会增强(实际上可能会阻碍)性能。
为了便于说明,假设我有以下层次结构:
abstract type Character end
struct SpaceMarine <: Character end
# I've used the abstract type Character as a type annotation.
svetlana :: Character = SpaceMarine()
Run Code Online (Sandbox Code Playgroud)
像我一样使用类型注释(注意它是抽象的)会阻碍性能还是有帮助?
在这种情况下,svetlana只能是 的子类型Character,这是我需要的行为。
就像在 C# 或 Java 中一样,您可以做Character svetlana = new SpaceMarine(),svetlana只能是 的任何子类型Character。
如果使用类型注释会损害性能,我该如何保留 的svetlana类型Character?
我不想有人写svetlana = "Space Marine"。在本例中,它现在是一个String.
我正在尝试做类似下面的事情。
@Entity
@Table(name="Sample")
public record Sample(Integer id, String name) {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="user_id")
private Integer id;
@Column(name="username")
private String name;
}
Run Code Online (Sandbox Code Playgroud)
但是,它给我错误“记录中不允许用户声明的非静态字段 id”,名称字段也相同。
有没有办法将新的java功能“记录”与JPA注释一起使用?
当尝试使用 Java 21 配置项目时,我收到错误:
不支持 Java。您的构建当前配置为使用 Java 21 和 Gradle 8.3。
不幸的是,目前官方文档中没有信息:https ://docs.gradle.org/current/userguide/compatibility.html
执行 Gradle 需要 8 到 20 之间的 Java 版本。尚不支持 Java 21 及更高版本。
Gradle 从哪个版本开始支持 Java 21?
鉴于Groovy没有do-while语句,我如何迭代输入流中的所有字节?
目前还没有'do ... while()'语法.
由于含糊不清,我们还没有增加对Groovy的支持
在Groovy中执行以下Java代码的最佳方法是什么?
def numRead = inputStream.read(fileBytes, 0, fileBytes.length);
do{
} while(numRead > 0);
Run Code Online (Sandbox Code Playgroud)
(我知道我可以使用布尔值来做到这一点,我只想知道是否有"Groovy"方式)
我想使用java.time.LocalDate和java.time.LocalDateTime隐含的Ordered喜欢:
val date1 = java.time.LocalDate.of(2000, 1, 1)
val date2 = java.time.LocalDate.of(2010, 10, 10)
if (date1 < date2) ...
Run Code Online (Sandbox Code Playgroud)
import scala.math.Ordering.Implicits._不起作用,因为LocalDate继承Comparable<ChronoLocalDate>而不是Comparable<LocalDate>.我怎样才能编写自己的imred命令来使用<,<=,>,> =运算符/方法进行比较LocalDate?
编辑:
我找到了一种使用隐式类的方法:
import java.time.{LocalDate}
object MyDateTimeUtils {
implicit class MyLocalDateImprovements(val ld: LocalDate)
extends Ordered[LocalDate] {
def compare(that: LocalDate): Int = ld.compareTo(that)
}
}
// Test
import MyDateTimeUtils._
val d1 = LocalDate.of(2016, 1, 1)
val d2 = LocalDate.of(2017, 2, 3)
if (d1 < d2) println("d1 …Run Code Online (Sandbox Code Playgroud) 对于我工作的一些项目,我最近从Jersey 1换到了Jersey 2.我遇到过泽西2号的最大烦恼是它使用的是HK2,由于某种原因重新打包标准的Maven文物.为了避免潜在的讨厌调试问题,我尽量避免从不同的项目中引入相同的类.我使用Extra Enforcer规则依赖项中的Ban Duplicate Classes Maven强制执行规则来破坏构建(如果发生这种情况).
根据前面提到的Ban Duplicate Classes enforcer规则,切换到Jersey 2会在其工件和我之前使用的标准工件之间引入以下冲突:
hk2 Artifact Conflicting Artifact
org.glassfish.hk2.external:aopalliance-repackaged:2.3.0-b07 aopalliance:aopalliance:1.0
org.glassfish.hk2.external:bean-validator:2.3.0-b07 com.fasterxml:classmate:0.8.0 (used by org.hibernate:hibernate-validator:5.0.0.Final)
org.glassfish.hk2.external:bean-validator:2.3.0-b07 javax.validation:validation-api:1.1.0.Final
org.glassfish.hk2.external:bean-validator:2.3.0-b07 org.hibernate:hibernate-validator:5.0.0.Final
org.glassfish.hk2.external:bean-validator:2.3.0-b07 org.jboss.logging:jboss-logging:3.1.0.GA
org.glassfish.hk2.external:javax.inject:2.3.0-b07 javax.inject:javax.inject:1
Run Code Online (Sandbox Code Playgroud)
我的解决方案是将标准工件从可传递的依赖项中排除,因此只使用hk2工件.我认为这更安全:我不知道hk2工件还有什么东西可能会丢失,如果我要排除它们(例如,bean-validator工件似乎重新打包至少四个工件).这样做的缺点是,首先,我对我的依赖项进行了大量的排除,这些依赖项带来了其他无关紧要的API依赖项,例如validation-api.其次,我的工件现在正在导出HK2重新打包的依赖项,而不是我希望导出的实际API类.
最终,我的问题是:
除了这些问题的实际答案之外,联系HK2背后的开发人员会有什么好的论坛,所以我可以直接提出这个问题?我查看了网站,虽然我找到了一些邮件列表,但我没有看到任何明显适合提问的问题.
根据Maven依赖文档,所有编译依赖项都是明确列出的,而不是在编译时传递使用:
它的意思是[传递编译依赖项]应该是运行时范围,因此必须明确列出所有编译依赖项 - 但是,有一种情况,您依赖的库从另一个库扩展一个类,迫使您在编译时间.因此,编译时依赖性仍然是编译范围,即使它们是可传递的.
Spring Boot有一个"Starter"依赖的概念.从Spring Boot自己的文档(以及我在Spring Boot自己的示例和其他地方看到的许多使用示例)中可以清楚地看出,这些示例旨在传递大量其他依赖项,以便在运行时和编译时使用.Per Spring Boot的文档:
启动器是一组方便的依赖关系描述符,您可以在应用程序中包含这些描述符.您可以获得所需的所有Spring和相关技术的一站式服务,而无需搜索示例代码并复制粘贴的依赖描述符.例如,如果您想开始使用Spring和JPA进行数据库访问,只需在项目中包含spring-boot-starter-data-jpa依赖项,就可以了.
启动器包含许多依赖项,这些依赖项是使项目快速启动和运行所需的依赖项,以及一组受支持的托管传递依赖项.
使用这种机制传递引入编译范围的依赖关系似乎与Maven官方打算如何使用它们的意图不一致.使这一点非常清楚的一个地方是Maven 依赖:分析插件目标,它在直接使用Maven启动器依赖项时显示警告.例如,mvn dependency:analyze在Spring Boot自己的" Getting Started "示例上运行会生成以下输出:
[WARNING] Used undeclared dependencies found:
[WARNING] org.springframework:spring-web:jar:4.3.6.RELEASE:compile
[WARNING] org.springframework.boot:spring-boot-test:jar:1.5.1.RELEASE:test
[WARNING] org.springframework.boot:spring-boot-test-autoconfigure:jar:1.5.1.RELEASE:test
[WARNING] org.springframework:spring-test:jar:4.3.6.RELEASE:test
[WARNING] org.springframework.boot:spring-boot:jar:1.5.1.RELEASE:compile
[WARNING] org.hamcrest:hamcrest-library:jar:1.3:test
[WARNING] org.springframework:spring-context:jar:4.3.6.RELEASE:compile
[WARNING] junit:junit:jar:4.12:test
[WARNING] org.springframework.boot:spring-boot-autoconfigure:jar:1.5.1.RELEASE:compile
[WARNING] org.springframework:spring-beans:jar:4.3.6.RELEASE:compile
[WARNING] Unused declared dependencies found:
[WARNING] org.springframework.boot:spring-boot-starter-web:jar:1.5.1.RELEASE:compile
[WARNING] org.springframework.boot:spring-boot-starter-test:jar:1.5.1.RELEASE:test
[WARNING] org.springframework.boot:spring-boot-starter-actuator:jar:1.5.1.RELEASE:compile
Run Code Online (Sandbox Code Playgroud)
我的问题是为什么Spring Boot启动器模式的设计方式与底层构建系统的声明方式完全相反.是否有关于该主题的发布讨论,或在任何地方给出解释?
spring dependency-management maven maven-dependency-plugin spring-boot
我无意中点击了链接以启用我正在处理的Gradle项目的自动导入.如何为当前项目禁用它?我找到的唯一选项是默认禁用所有项目.
我正在使用IDEA(2017.1)的最新版本.