开发工具分享
  • 首页
  • 计算科学
  • 文化旅游
  • 项目和网站
    • OSSEZ 计算技术
    • USRealEstate 社区
    • 地区文化
    • CWIKI.US
    • BUG.OSSEZ.COM
    • RSS.OSSEZ.COM
CWIKIUS.CN
一个有独立思考和温度的清新站
Computer Science

Archiva 运行时提示 JAXBException 错误

有关错误的信息如下: 问题和解决 有关这个问题是因为你的服务器上可能使用了 JDK 11 的版本。 但是最新的 Archiva 只能够支持 1.8 的版本。 如果你的服务器缺包的话,就会出现上面的错误。 你可以尝试使用 Archiva 自己进行编译,或者部署到 1.8 的 JDK 版本上,或者等到 Archiva 3.0 的版本后再开始用吧。 我们看到 Git 的代码库中,有关 Archiva 正在尝试使用 11 的 JDK 版本进行编译。 但是,具体需要什么时候才能用,就不太清楚了。   https://www.ossez.com/t/archiva-jaxbexception/14002

2022年08月03日 0Comments 454Browse 0Like Read more
Computer Science

Java 对象如何安全的 toString

如果我们的对象为空对象的时候,我们再使用 toString() 方法,我们将会得到空对象的异常。 这个对象有可能就是 String 对象,也有可能是其他的对象。 如下面的 2 行语句: Object obj = null; obj.toString(); 如果你执行上面 2 行语句的话,铁定会抛出下面的空对象异常。     如何让 Java 能够 toString 又不抛出异常呢? 解决方法 我们可以使用 Apache commons.lang3 提供的 toString() 方法。 如下面显示的使用用例: Object obj = null; ObjectUtils.toString(obj, StringUtils.EMPTY); ObjectUtils.toString(obj, ()->StringUtils.EMPTY); 如果我们输入的对象为 NULL 的话,上面的语句将会输出一个指定的字符串而不抛出空异常。 需要注意的是写法: ObjectUtils.toString(obj, StringUtils.EMPTY); Apache commons.lang3 项目官方提示这个方法将会在后续的版本中被丢弃。 原因是这个方法已经被 java.util.Objects.toString(Object, String) 方法替代了。     如果你使用的是 Java 7 以上版本的话,建议你使用 java.util.Objects.toString 方法。 你可以简单的 Objects.toString 就可以了: assertThat("null").isEqualTo(Objects.toString(obj)); assertThat("").isEqualTo(Objects.toString(obj,StringUtils.EMPTY)); 对比上面 2 个方法的不同,第一个方法是如果为 Null 的话,就直接输出字符串 null。 第二个方法是如果为空的话,将会用另外一个字符串去替换。 总结 通过上面的代码和用例,我们对在对象 toString 的时候可能出现的 Null 对象异常情况进行了解说。 并且展示了可以使用的一些方法。   https://www.ossez.com/t/java-tostring/14000

2022年08月03日 0Comments 532Browse 0Like Read more
Computer Science

Apache.commons.lang3 的 isNumber 将会在 lang 4 的时候丢弃

在判断输入的字符串是不是一个数字的时候,我们通常用的最多的方法就是 : NumberUtils.isNumber("12"); 但是这个方法将会在 Lang 4.0 版本中被丢弃。 可以使用的替代方法为:isCreatable(String) 通过查看源代码,我们可以看到 isNumber 也是调用 isCreatable 方法的。     @Deprecated public static boolean isNumber(final String str) { return isCreatable(str); } isCreatable 方法首先是对输入的字符串拆分成字符,然后对每一个字符进行判断,以确定输入的字符串是不是数字,是不是可以将 String 转换为数字类型。     通过上面的方法,我们看到判断的方法还是有点复杂的。   https://www.ossez.com/t/apache-commons-lang3-isnumber-lang-4/13990

2022年08月03日 0Comments 514Browse 0Like Read more
Computer Science

Junit 测试中如何对异常进行断言

本文对在 Junit 测试中如何对异常进行断言的几种方法进行说明。 使用 Junit 5 如果你使用 Junit 5 的话,你可以直接使用 assertThrows 方法来对异常进行断言。     代码如下: Exception exception = assertThrows(NumberFormatException.class, () -> { new Integer("one"); }); System.out.println(exception); 使用 AssertJ 使用 AssertJ ,你可以有不少方法进行选择。 我们尝试使用 assertThatThrownBy 和 assertThatExceptionOfType 2 个方法。 这 2 个方法的写法有点不一样,但是整体效果是差不多的。 考察如下代码: // AssertJ assertThatThrownBy assertThatThrownBy(() -> { new Integer("one"); }).isInstanceOf(NumberFormatException.class).hasMessageStartingWith("For input string"); // AssertJ assertThatExceptionOfType assertThatExceptionOfType(NumberFormatException.class).isThrownBy(() -> { new Integer("one"); }); 上面代码中,对有关断言的使用进行了一些说明。   https://www.ossez.com/t/junit/13989

2022年08月03日 0Comments 650Browse 0Like Read more
Computer Science

AssertJ 的异常(Exception )断言

本页面主要来说说 AssertJ 的异常断言。 概述 在本快速导航中,我们主要来聊聊的 AssertJ 的异常(exception)断言。 有关 AssertJ 的项目,请访问 AssertJ / Fluent assertions for java 页面。     不使用 AssertJ 如果不使用 AssertJ,我们需要先捕获一个异常,然后再在异常中进行断言。 例如下面的伪代码,我们捕获了一个异常,然后再进行判断。 try { // ... } catch (Exception e) { // assertions } 但是,如果程序在执行的时候没有抛出异常,在上面的用例中,测试将会通过。 为了让断言能够被执行,为什么我们还需要手动触发一个异常呢? 使用 AssertJ 在 Java 8 以后的版本,我们可以通过使用 AssertJ 和 lambda 表达式,非常容易的对异常进行断言处理。 使用 assertThatThrownBy() 方法 让我们看看下面的代码将会抛出 IndexOutOfBoundsException 异常: 这是因为我们定义一个 List 的长度是 2 ,但是我们有一行代码将会访问 List 的第 3 个元素,上面的代码必然会抛出一个异常。 assertThatThrownBy(() -> { ArrayList<String> myStringList = new ArrayList<String>(Arrays.asList("Strine one", "String two")); myStringList.get(2); }).isInstanceOf(IndexOutOfBoundsException.class) .hasMessageStartingWith("Index 2"); 需要注意上面的代码片段有可能会抛出一个 lambda 表达式异常。 当然,我们还可以使用 AssertJ 来提供一个链式断言,这个就是为什么我们不使用 Junit 自带断言的原因。 .hasMessageStartingWith("Index 2") .hasMessageContaining("2") .hasMessageEndingWith("length 2") .hasMessageContaining("Index 2") .hasNoCause(); 使用 assertThatExceptionOfType 方法 这个方法与上面使用的方法类似,因为我们知道这个程序执行就会抛出异常,因此我们在程序的最开始就指定了异常: assertThatExceptionOfType(ArithmeticException.class).isThrownBy(() -> { int numerator = 10; int denominator = 0; int quotient = numerator / denominator; }) .withMessageContaining("/ by zero"); 上面的方法,因为我们使用了 0 为除数,因此必定会抛出异常。 在程序最开始的时候我们就断言了这个异常。 使用 assertThatIOException 和其他的一些常用类型 AssertJ 针对 一些常用的异常进行了包装,你可以直接使用这些被包装过的异常: assertThatIOException().isThrownBy(() -> { // ... }); 和其他一些类似的异常: assertThatIllegalArgumentException() assertThatIllegalStateException() assertThatIOException() assertThatNullPointerException() 从断言中将异常分离 可选的,我们可以将异常从断言中进行分离。 分离的办法就是添加一个 when 和 then 逻辑段: // when Throwable thrown = catchThrowable(() -> { int numerator = 10; int denominator = 0; int quotient = numerator / denominator; }); // then assertThat(thrown).isInstanceOf(ArithmeticException.class) .hasMessageContaining("/ by zero"); } 上面的代码首先是抛出异常,然后对抛出的异常再进行断言判断。 结论 在这篇短文中,我们对 AssertJ 是如何进行异常断言的情况进行了简单的介绍,同时讨论了 AssertJ 进行是如何进行异常断言的。   https://www.ossez.com/t/assertj-exception/13988

2022年08月03日 0Comments 468Browse 0Like Read more
Computer Science

理解 Java 中的 NumberFormatException 异常

如果我在 Java 中对字符串和数字直接进行类型转换的话,我们有可能会遇到 NumberFormatException 异常。 介绍 当 Java 在将 String 字符串转换为数字的时候,如果遇到没有办法转换的情况,Java 将会抛出一个 NumberFormatException 异常。 NumberFormatException 这个异常是 Java 中的一个 unchecked 类型异常,因此程序不会被要求强制进行处理。 在本页面中,我们对 NumberFormatException 这个异常进行一些简要说明和我们应该如何避免这个异常。 如何导致 NumberFormatException 异常的 在实际编码过程中,有一些构造方法或者类型转换方法,将会导致这个异常。 对导致这个异常的常见情况,我们在下面的页面中进行一些说明和讨论。 构造函数中 如果我们在构造函数中对不是数字的字符串进行类型转换的话,将会有可能抛出这个异常。 例如我们尝试将一个字符串转换为 Integer 或Double 对象,但是输入的字符串不是数字。 下面 2 个句子将会抛出 NumberFormatException 异常: Integer aIntegerObj = new Integer("one"); Double doubleDecimalObj = new Double("two.2"); 我们如果运行上面的代码,我们可以看到 JDK 将会提示我们没有办法将输入的字符串转换为整数类型。 Exception in thread "main" java.lang.NumberFormatException: For input string: "one" at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) at java.lang.Integer.parseInt(Integer.java:580) at java.lang.Integer.<init>(Integer.java:867) at MainClass.main(MainClass.java:11)     上面的构造方法将会抛出无法将字符串转换为数字的异常。 在调用 parseInt() 内部方法的时候将会提示无法转换的错误。 上面的修改也非常简单,这是因为 Java 的 Number API 不能处理字符串导致的,我们只需要将输入的字符串进行调整,保持为数字类型即可。 使用下面的代码就没有问题了。 Integer aIntegerObj = new Integer("1"); Double doubleDecimalObj = new Double("2.2"); 处理非数字类型的方法 与构造方法的错误类似,有些方法在处理的时候也会导致异常。 比如说我们常常会用到的下面的一些方法 par seInt(), parseDouble(), valueOf(), 和 decode() 。 例如,我们尝试进行下面的一些类型的转换的话,我们有可能遇到与上面相同的方法: int aIntPrim = Integer.parseInt("two"); double aDoublePrim = Double.parseDouble("two.two"); Integer aIntObj = Integer.valueOf("three"); Long decodedLong = Long.decode("64403L"); 这个错误与在上面构造方法中出现的错误是相同的。 我们可以简单的按照错误提示修改输入参数就可以了: int aIntPrim = Integer.parseInt("2"); double aDoublePrim = Double.parseDouble("2.2"); Integer aIntObj = Integer.valueOf("3"); Long decodedLong = Long.decode("64403"); 输入字符串参数有一些奇怪字符 另外,不仅仅是输入字符串本身不是数字的问题,有可能输入的字符串可能有一些奇怪的字符,包括有空格,下划线等。 类型转换函数或者构造函数,本身是不会对输入字符串进行处理的。 Short shortInt = new Short("2 "); int bIntPrim = Integer.parseInt("_6000"); 上面我们代码执行的时候也会遇到相同的问题。 例如第一行代码的主要原因就是因为有空格,我们可以首先对空格进行清理。 针对这种情况,我们首先需要对输入的字符串进行格式化处理,处理掉错误的字符。 Short shortInt = new Short("2 ".trim()); int bIntPrim = Integer.parseInt("_6000".replaceAll("_", "")); int bIntPrim = Integer.parseInt("-6000"); 需要注意的是,上面代码中的第 3 行,我们给出的是一个负数。 在 Java 中,负数是允许的,但是你不能使用下划线,你只能使用中划线。 语言特性的数字格式化 这里我们说的语言特性数字格式化主要是因为不同地区和国家对数字的表达方式是不一样的。 例如,在一些国家 “4000,1 ” 可能也会被用来表示一个小数“4000.1”。 如果你不对你的程序进行配置的话,在默认情况下,你还是会得到一个 NumberFormatException 异常,因为我们的程序没有办法处理以逗号表示为小数点: double aDoublePrim = Double.parseDouble("4000,1"); 因此,我们需要让我们的程序明白,这里的逗号是小数点才能避免这个类型转换错误。 例如,我们可以使用 NumberFormat 将数字处理的地区设置为欧洲地区,那么你的程序将不会提示格式字符的错误。 请考察下面的代码,我们设置为法国以后,就可以运行了: NumberFormat numberFormat = NumberFormat.getInstance(Locale.FRANCE); Number parsedNumber = numberFormat.parse("4000,1"); assertEquals(4000.1, parsedNumber.doubleValue()); assertEquals(4000, parsedNumber.intValue()); 最佳实践 让我们来看看有可能导致 NumberFormatException 异常的一些原因,和我们应该如何来应对: Java Number API 不能处理特殊字符,因此不要尝试转换特殊字符。 你可以使用正则表达式对需要转换的字符串中的特殊字符进行过滤。 对需要转换的字符串进行一些处理,包括删除空格和对特殊字符串进行替换,删除等。 在一些特定的情况下,我们还是可以对特殊字符串进行处理的,这个时候你可以使用 NumberFormat 来先进行标记格式。 使用工具类,例如 NumberUtils.isNumber() 先对字符串进行检查。 总结 在这个页面中,我们对将 String 格式化为数字类型,使用 Java Number API 的方法和可能出现的异常进行了一些说明。 在这里我们看到了常见的导致异常的原因和我们可以避免的办法。   https://www.ossez.com/t/java-numberformatexception/13986

2022年08月03日 0Comments 533Browse 0Like Read more
Computer Science

Java 通过构造函数初始化 Integer 对象的方法将会被丢弃

通常,我们可以使用构造方法来创建一个整数对象,例如下面的代码: Integer aIntegerObj = new Integer("1"); 但是,上面的代码有可能在 IDE 中提示将会被丢弃。     将要被丢弃的原因是: Deprecated It is rarely appropriate to use this constructor. Use parseInt(String) to convert a string to a int primitive, or use valueOf(String) to convert a string to an Integer object. 简单来说这个使用这个构造方法创建整数对象的情况并不常见,所以 JDK 就打算丢弃掉这个构造方法创建整数对象的方法了。 可以使用 parseInt(String) 或者 valueOf(String) 来进行类型转换。 简单来说就是这个方法用到的情况并不多,并且不建议使用这个方法来创建新的数字类型对象了。 应该使用类型转换的方法来进行初始化。   https://www.ossez.com/t/java-integer/13987

2022年08月03日 0Comments 479Browse 0Like Read more
Computer Science

Discourse 支持中文用户名

Discourse 在默认安装的情况下是不支持中文用户名的输入的。 根据官方的说明,从 Discourse 2.3.0.beta9 版本开始,Discourse 就已经能够支持 Unicode 的用户名了,包括中文的用户名。 官方发布的文章为:https://meta.discourse.org/t/unicode-usernames-and-group-names/117737。 你需要对你的 Discourse 进行设置就行了。 设置位置 在管理员控制的设置中,搜索字符 unicode。 你就可以看到有个选项叫做 unicode usernames。 选择上这个选项就可以了。     如果你使用的是英文版语言的 Discourse 的话。 那么这个的配置选项就在这里了。     曾经在很久之前,有人讨论过这个内容,不过这个是在官方不支持的情况下。 目前你已经不需要安装这个插件了。   https://www.ossez.com/t/discourse/13983

2022年08月03日 0Comments 498Browse 0Like Read more
Computer Science

Git 如何从特定的提交中创建一个新的分支

有时候我们希望找到一个提交历史,然后从这个提交历史中创建一个分支。 很多人应该都会使用命令行工具来做,其实 IDEA 已经帮你做了。 IDEA 首先在 IDEA 中找到 Git,然后找到你的提交历史。 在找到提交历史后,可以选择鼠标的右键。 然后选择新分支。 你就可以从当前的提交历史中来创建一个新的分支了。 Source Tree 使用 SourceTree 也是一样的。 通过在提交历史中单击右键,然后选择分支,你就可在当前指定的提交历史中来创建一个新的分支了。 https://www.ossez.com/t/git/13981

2022年08月03日 0Comments 714Browse 0Like Read more
Computer Science

Maven 跳过测试的几种方式

在 Maven 对项目进行编译的时候,我们通常可能会希望跳过复杂的测试。     尤其是在开始项目还不是非常稳定的阶段。 命令行中使用 -Dmaven.test.skip=true 在命令行,只要简单的给任何目标添加 maven.test.skip 属性就能跳过测试: mvn install -Dmaven.test.skip=true 命令行中使用 -DskipTests 在 Maven 的命令中,使用参数 -DskipTests 来跳过测试 使用的命令为: mvn install -Dmaven.test.skip=true 修改 POM 文件 在pom.xml文件中增加配置 <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <skip>true</skip> </configuration> </plugin> </plugins> </build> maven.test.skip 和 skipTests 的区别 -DskipTests,不执行测试用例,但编译测试用例类生成相应的class文件至target/test-classes下。 -Dmaven.test.skip=true,不执行测试用例,也不编译测试用例类。 简单来说,这 2 个参数的区别就是 -Dmaven.test.skip 这个参数跳过测试更加彻底,连测试类编译都不会编译。 如果不是非常糟糕的环境配置问题还是其他需求的话,测试类最好还是进行编译。因此使用 -DskipTests 参数。   https://www.ossez.com/t/maven/11034

2022年08月03日 0Comments 413Browse 0Like Read more
1…678910
Archives
  • June 2026
  • May 2026
  • April 2026
  • March 2026
  • February 2026
  • January 2026
  • December 2025
  • November 2025
  • October 2025
  • September 2025
  • August 2025
  • July 2025
  • June 2025
  • May 2025
  • April 2025
  • March 2025
  • February 2025
  • January 2025
  • December 2024
  • November 2024
  • October 2024
  • September 2024
  • August 2024
  • July 2024
  • June 2024
  • May 2024
  • April 2024
  • March 2024
  • February 2024
  • January 2024
  • December 2023
  • November 2023
  • October 2023
  • September 2023
  • August 2023
  • July 2023
  • June 2023
  • May 2023
  • April 2023
  • December 2022
  • November 2022
  • October 2022
  • September 2022
  • August 2022
  • May 2022
  • April 2022
  • March 2022
  • February 2022
  • January 2022
  • December 2021
  • November 2021
  • October 2021
  • September 2021
  • August 2021
  • July 2021
  • June 2021
  • May 2021
  • April 2021
  • March 2021
  • February 2021
  • January 2021
  • December 2020
  • November 2020
  • October 2020
  • September 2020
  • August 2020
  • July 2020
  • June 2020
  • May 2020
  • April 2020
  • March 2020
  • February 2020
  • January 2020
  • December 2019
  • November 2019
  • October 2019
  • September 2019
  • August 2019
  • July 2019
  • June 2019
  • May 2019
  • April 2019
  • March 2019
  • February 2019
  • January 2019
  • December 2018
  • November 2018
  • October 2018
  • September 2018
  • August 2018
  • July 2018
  • June 2018
  • May 2018
  • April 2018
  • March 2018
Categories
  • Computer Science (2,367)
    • Confluence (663)
    • Gradle (12)
  • U.S. (511)
  • 文化旅游 (146)

COPYRIGHT © 2020 CWIKIUS. ALL RIGHTS RESERVED.

THEME KRATOS MADE BY VTROIS

湘ICP备2020018253号-1