Merge remote-tracking branch 'upstream/master'
This commit is contained in:
commit
0638d299e1
|
@ -7,4 +7,6 @@
|
||||||
- [Efficiently Merge Sorted Java Sequences](https://www.baeldung.com/java-merge-sorted-sequences)
|
- [Efficiently Merge Sorted Java Sequences](https://www.baeldung.com/java-merge-sorted-sequences)
|
||||||
- [Introduction to Greedy Algorithms with Java](https://www.baeldung.com/java-greedy-algorithms)
|
- [Introduction to Greedy Algorithms with Java](https://www.baeldung.com/java-greedy-algorithms)
|
||||||
- [The Caesar Cipher in Java](https://www.baeldung.com/java-caesar-cipher)
|
- [The Caesar Cipher in Java](https://www.baeldung.com/java-caesar-cipher)
|
||||||
|
- [Implementing a 2048 Solver in Java](https://www.baeldung.com/2048-java-solver)
|
||||||
|
- [Finding Top K Elements in an Array](https://www.baeldung.com/java-array-top-elements)
|
||||||
- More articles: [[<-- prev]](/../algorithms-miscellaneous-5)
|
- More articles: [[<-- prev]](/../algorithms-miscellaneous-5)
|
||||||
|
|
|
@ -6,4 +6,4 @@ This module contains articles about Apache Shiro
|
||||||
|
|
||||||
- [Introduction to Apache Shiro](https://www.baeldung.com/apache-shiro)
|
- [Introduction to Apache Shiro](https://www.baeldung.com/apache-shiro)
|
||||||
- [Permissions-Based Access Control with Apache Shiro](https://www.baeldung.com/apache-shiro-access-control)
|
- [Permissions-Based Access Control with Apache Shiro](https://www.baeldung.com/apache-shiro-access-control)
|
||||||
|
- [Spring Security vs Apache Shiro](https://www.baeldung.com/spring-security-vs-apache-shiro)
|
||||||
|
|
|
@ -13,4 +13,5 @@ This module contains articles about core Groovy concepts
|
||||||
- [Converting a String to a Date in Groovy](https://www.baeldung.com/groovy-string-to-date)
|
- [Converting a String to a Date in Groovy](https://www.baeldung.com/groovy-string-to-date)
|
||||||
- [Guide to I/O in Groovy](https://www.baeldung.com/groovy-io)
|
- [Guide to I/O in Groovy](https://www.baeldung.com/groovy-io)
|
||||||
- [Convert String to Integer in Groovy](https://www.baeldung.com/groovy-convert-string-to-integer)
|
- [Convert String to Integer in Groovy](https://www.baeldung.com/groovy-convert-string-to-integer)
|
||||||
|
- [Groovy Variable Scope](https://www.baeldung.com/groovy/variable-scope)
|
||||||
- [[More -->]](/core-groovy-2)
|
- [[More -->]](/core-groovy-2)
|
||||||
|
|
|
@ -8,7 +8,7 @@ This module contains articles about Java 11 core features
|
||||||
- [Java 11 Local Variable Syntax for Lambda Parameters](https://www.baeldung.com/java-var-lambda-params)
|
- [Java 11 Local Variable Syntax for Lambda Parameters](https://www.baeldung.com/java-var-lambda-params)
|
||||||
- [Java 11 String API Additions](https://www.baeldung.com/java-11-string-api)
|
- [Java 11 String API Additions](https://www.baeldung.com/java-11-string-api)
|
||||||
- [Java 11 Nest Based Access Control](https://www.baeldung.com/java-nest-based-access-control)
|
- [Java 11 Nest Based Access Control](https://www.baeldung.com/java-nest-based-access-control)
|
||||||
- [Exploring the New HTTP Client in Java 9 and 11](https://www.baeldung.com/java-9-http-client)
|
- [Exploring the New HTTP Client in Java](https://www.baeldung.com/java-9-http-client)
|
||||||
- [An Introduction to Epsilon GC: A No-Op Experimental Garbage Collector](https://www.baeldung.com/jvm-epsilon-gc-garbage-collector)
|
- [An Introduction to Epsilon GC: A No-Op Experimental Garbage Collector](https://www.baeldung.com/jvm-epsilon-gc-garbage-collector)
|
||||||
- [Guide to jlink](https://www.baeldung.com/jlink)
|
- [Guide to jlink](https://www.baeldung.com/jlink)
|
||||||
- [Negate a Predicate Method Reference with Java 11](https://www.baeldung.com/java-negate-predicate-method-reference)
|
- [Negate a Predicate Method Reference with Java 11](https://www.baeldung.com/java-negate-predicate-method-reference)
|
||||||
|
|
|
@ -1,12 +1,15 @@
|
||||||
package com.baeldung.modules.main;
|
package com.baeldung.modules.main;
|
||||||
|
|
||||||
|
import com.baeldung.modules.hello.HelloInterface;
|
||||||
import com.baeldung.modules.hello.HelloModules;
|
import com.baeldung.modules.hello.HelloModules;
|
||||||
|
import java.util.ServiceLoader;
|
||||||
|
|
||||||
public class MainApp {
|
public class MainApp {
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
HelloModules.doSomething();
|
HelloModules.doSomething();
|
||||||
|
|
||||||
HelloModules module = new HelloModules();
|
Iterable<HelloInterface> services = ServiceLoader.load(HelloInterface.class);
|
||||||
module.sayHello();
|
HelloInterface service = services.iterator().next();
|
||||||
|
service.sayHello();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,3 +13,4 @@ This module contains articles about core Java features that have been introduced
|
||||||
- [Java 9 Platform Logging API](https://www.baeldung.com/java-9-logging-api)
|
- [Java 9 Platform Logging API](https://www.baeldung.com/java-9-logging-api)
|
||||||
- [Java 9 Reactive Streams](https://www.baeldung.com/java-9-reactive-streams)
|
- [Java 9 Reactive Streams](https://www.baeldung.com/java-9-reactive-streams)
|
||||||
- [Multi-Release JAR Files with Maven](https://www.baeldung.com/maven-multi-release-jars)
|
- [Multi-Release JAR Files with Maven](https://www.baeldung.com/maven-multi-release-jars)
|
||||||
|
- [The Difference between RxJava API and the Java 9 Flow API](https://www.baeldung.com/rxjava-vs-java-flow-api)
|
||||||
|
|
|
@ -9,3 +9,4 @@ This module contains articles about Java 9 core features
|
||||||
- [Iterate Through a Range of Dates in Java](https://www.baeldung.com/java-iterate-date-range)
|
- [Iterate Through a Range of Dates in Java](https://www.baeldung.com/java-iterate-date-range)
|
||||||
- [Initialize a HashMap in Java](https://www.baeldung.com/java-initialize-hashmap)
|
- [Initialize a HashMap in Java](https://www.baeldung.com/java-initialize-hashmap)
|
||||||
- [Immutable ArrayList in Java](https://www.baeldung.com/java-immutable-list)
|
- [Immutable ArrayList in Java](https://www.baeldung.com/java-immutable-list)
|
||||||
|
- [Easy Ways to Write a Java InputStream to an OutputStream](https://www.baeldung.com/java-inputstream-to-outputstream)
|
||||||
|
|
|
@ -5,4 +5,4 @@ This module contains complete guides about arrays in Java
|
||||||
### Relevant Articles:
|
### Relevant Articles:
|
||||||
- [Arrays in Java: A Reference Guide](https://www.baeldung.com/java-arrays-guide)
|
- [Arrays in Java: A Reference Guide](https://www.baeldung.com/java-arrays-guide)
|
||||||
- [Guide to the java.util.Arrays Class](https://www.baeldung.com/java-util-arrays)
|
- [Guide to the java.util.Arrays Class](https://www.baeldung.com/java-util-arrays)
|
||||||
- [What is [Ljava.lang.Object;?]](https://www.baeldung.com/java-tostring-array)
|
- [What is \[Ljava.lang.Object;?](https://www.baeldung.com/java-tostring-array)
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
## Core Java Collections Cookbooks and Examples
|
## Core Java Collections Cookbooks and Examples
|
||||||
|
|
||||||
### Relevant Articles:
|
### Relevant Articles:
|
||||||
|
|
||||||
- [Time Comparison of Arrays.sort(Object[]) and Arrays.sort(int[])](https://www.baeldung.com/arrays-sortobject-vs-sortint)
|
- [Time Comparison of Arrays.sort(Object[]) and Arrays.sort(int[])](https://www.baeldung.com/arrays-sortobject-vs-sortint)
|
||||||
- [Java ArrayList vs Vector](https://www.baeldung.com/java-arraylist-vs-vector)
|
- [Java ArrayList vs Vector](https://www.baeldung.com/java-arraylist-vs-vector)
|
||||||
- [Differences Between HashMap and Hashtable](https://www.baeldung.com/hashmap-hashtable-differences)
|
- [Differences Between HashMap and Hashtable](https://www.baeldung.com/hashmap-hashtable-differences)
|
||||||
|
@ -10,3 +11,4 @@
|
||||||
- [Performance of contains() in a HashSet vs ArrayList](https://www.baeldung.com/java-hashset-arraylist-contains-performance)
|
- [Performance of contains() in a HashSet vs ArrayList](https://www.baeldung.com/java-hashset-arraylist-contains-performance)
|
||||||
- [Fail-Safe Iterator vs Fail-Fast Iterator](https://www.baeldung.com/java-fail-safe-vs-fail-fast-iterator)
|
- [Fail-Safe Iterator vs Fail-Fast Iterator](https://www.baeldung.com/java-fail-safe-vs-fail-fast-iterator)
|
||||||
- [Quick Guide to the Java Stack](https://www.baeldung.com/java-stack)
|
- [Quick Guide to the Java Stack](https://www.baeldung.com/java-stack)
|
||||||
|
- [Convert an Array of Primitives to a List](https://www.baeldung.com/java-primitive-array-to-list)
|
||||||
|
|
|
@ -16,6 +16,11 @@
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.openjdk.jol</groupId>
|
||||||
|
<artifactId>jol-core</artifactId>
|
||||||
|
<version>${jol-core.version}</version>
|
||||||
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.openjdk.jmh</groupId>
|
<groupId>org.openjdk.jmh</groupId>
|
||||||
<artifactId>jmh-core</artifactId>
|
<artifactId>jmh-core</artifactId>
|
||||||
|
@ -37,6 +42,7 @@
|
||||||
<properties>
|
<properties>
|
||||||
<openjdk.jmh.version>1.19</openjdk.jmh.version>
|
<openjdk.jmh.version>1.19</openjdk.jmh.version>
|
||||||
<assertj.version>3.11.1</assertj.version>
|
<assertj.version>3.11.1</assertj.version>
|
||||||
|
<jol-core.version>0.10</jol-core.version>
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
</project>
|
</project>
|
||||||
|
|
|
@ -0,0 +1,178 @@
|
||||||
|
package com.baeldung.collections.bitset;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.openjdk.jol.info.ClassLayout;
|
||||||
|
import org.openjdk.jol.info.GraphLayout;
|
||||||
|
|
||||||
|
import java.util.BitSet;
|
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
|
public class BitSetUnitTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenBoolArray_whenMemoryLayout_thenConsumeMoreThanOneBit() {
|
||||||
|
boolean[] bits = new boolean[1024 * 1024];
|
||||||
|
|
||||||
|
System.out.println(ClassLayout.parseInstance(bits).toPrintable());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenBitSet_whenMemoryLayout_thenConsumeOneBitPerFlag() {
|
||||||
|
BitSet bitSet = new BitSet(1024 * 1024);
|
||||||
|
|
||||||
|
System.out.println(GraphLayout.parseInstance(bitSet).toPrintable());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenBitSet_whenSetting_thenShouldBeTrue() {
|
||||||
|
BitSet bitSet = new BitSet();
|
||||||
|
|
||||||
|
bitSet.set(10);
|
||||||
|
assertThat(bitSet.get(10)).isTrue();
|
||||||
|
|
||||||
|
bitSet.set(20, 30);
|
||||||
|
for (int i = 20; i <= 29; i++) {
|
||||||
|
assertThat(bitSet.get(i)).isTrue();
|
||||||
|
}
|
||||||
|
assertThat(bitSet.get(30)).isFalse();
|
||||||
|
|
||||||
|
bitSet.set(10, false);
|
||||||
|
assertThat(bitSet.get(10)).isFalse();
|
||||||
|
|
||||||
|
bitSet.set(20, 30, false);
|
||||||
|
for (int i = 20; i <= 30; i++) {
|
||||||
|
assertThat(bitSet.get(i)).isFalse();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenBitSet_whenClearing_thenShouldBeFalse() {
|
||||||
|
BitSet bitSet = new BitSet();
|
||||||
|
bitSet.set(42);
|
||||||
|
assertThat(bitSet.get(42)).isTrue();
|
||||||
|
|
||||||
|
bitSet.clear(42);
|
||||||
|
assertThat(bitSet.get(42)).isFalse();
|
||||||
|
|
||||||
|
bitSet.set(10, 20);
|
||||||
|
for (int i = 10; i < 20; i++) {
|
||||||
|
assertThat(bitSet.get(i)).isTrue();
|
||||||
|
}
|
||||||
|
|
||||||
|
bitSet.clear(10, 20);
|
||||||
|
for (int i = 10; i < 20; i++) {
|
||||||
|
assertThat(bitSet.get(i)).isFalse();
|
||||||
|
}
|
||||||
|
|
||||||
|
bitSet.set(10, 20);
|
||||||
|
bitSet.clear();
|
||||||
|
for (int i = 0; i < 100; i++) {
|
||||||
|
assertThat(bitSet.get(i)).isFalse();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenBitSet_whenGettingElements_thenShouldReturnRequestedBits() {
|
||||||
|
BitSet bitSet = new BitSet();
|
||||||
|
bitSet.set(42);
|
||||||
|
|
||||||
|
assertThat(bitSet.get(42)).isTrue();
|
||||||
|
assertThat(bitSet.get(43)).isFalse();
|
||||||
|
|
||||||
|
bitSet.set(10, 20);
|
||||||
|
BitSet newBitSet = bitSet.get(10, 20);
|
||||||
|
for (int i = 0; i < 10; i++) {
|
||||||
|
assertThat(newBitSet.get(i)).isTrue();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenBitSet_whenFlip_thenTogglesTrueToFalseAndViceVersa() {
|
||||||
|
BitSet bitSet = new BitSet();
|
||||||
|
bitSet.set(42);
|
||||||
|
bitSet.flip(42);
|
||||||
|
assertThat(bitSet.get(42)).isFalse();
|
||||||
|
|
||||||
|
bitSet.flip(12);
|
||||||
|
assertThat(bitSet.get(12)).isTrue();
|
||||||
|
|
||||||
|
bitSet.flip(30, 40);
|
||||||
|
for (int i = 30; i < 40; i++) {
|
||||||
|
assertThat(bitSet.get(i)).isTrue();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenBitSet_whenGettingTheSize_thenReturnsTheSize() {
|
||||||
|
BitSet defaultBitSet = new BitSet();
|
||||||
|
assertThat(defaultBitSet.size()).isEqualTo(64);
|
||||||
|
|
||||||
|
BitSet bitSet = new BitSet(1024);
|
||||||
|
assertThat(bitSet.size()).isEqualTo(1024);
|
||||||
|
|
||||||
|
assertThat(bitSet.cardinality()).isEqualTo(0);
|
||||||
|
bitSet.set(10, 30);
|
||||||
|
assertThat(bitSet.cardinality()).isEqualTo(30 - 10);
|
||||||
|
|
||||||
|
assertThat(bitSet.length()).isEqualTo(30);
|
||||||
|
bitSet.set(100);
|
||||||
|
assertThat(bitSet.length()).isEqualTo(101);
|
||||||
|
|
||||||
|
assertThat(bitSet.isEmpty()).isFalse();
|
||||||
|
bitSet.clear();
|
||||||
|
assertThat(bitSet.isEmpty()).isTrue();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenBitSet_whenSetOperations_thenShouldReturnAnotherBitSet() {
|
||||||
|
BitSet first = new BitSet();
|
||||||
|
first.set(5, 10);
|
||||||
|
|
||||||
|
BitSet second = new BitSet();
|
||||||
|
second.set(7, 15);
|
||||||
|
|
||||||
|
assertThat(first.intersects(second)).isTrue();
|
||||||
|
|
||||||
|
first.and(second);
|
||||||
|
assertThat(first.get(7)).isTrue();
|
||||||
|
assertThat(first.get(8)).isTrue();
|
||||||
|
assertThat(first.get(9)).isTrue();
|
||||||
|
assertThat(first.get(10)).isFalse();
|
||||||
|
|
||||||
|
first.clear();
|
||||||
|
first.set(5, 10);
|
||||||
|
|
||||||
|
first.xor(second);
|
||||||
|
for (int i = 5; i < 7; i++) {
|
||||||
|
assertThat(first.get(i)).isTrue();
|
||||||
|
}
|
||||||
|
for (int i = 10; i < 15; i++) {
|
||||||
|
assertThat(first.get(i)).isTrue();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenBitSet_whenStream_thenStreamsAllSetBits() {
|
||||||
|
BitSet bitSet = new BitSet();
|
||||||
|
bitSet.set(15, 25);
|
||||||
|
|
||||||
|
bitSet.stream().forEach(System.out::println);
|
||||||
|
assertThat(bitSet.stream().count()).isEqualTo(10);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenBitSet_whenNextOrPrev_thenReturnsTheNextOrPrevClearOrSetBit() {
|
||||||
|
BitSet bitSet = new BitSet();
|
||||||
|
bitSet.set(15, 25);
|
||||||
|
|
||||||
|
assertThat(bitSet.nextSetBit(13)).isEqualTo(15);
|
||||||
|
assertThat(bitSet.nextSetBit(25)).isEqualTo(-1);
|
||||||
|
|
||||||
|
assertThat(bitSet.nextClearBit(23)).isEqualTo(25);
|
||||||
|
|
||||||
|
assertThat(bitSet.previousClearBit(24)).isEqualTo(14);
|
||||||
|
assertThat(bitSet.previousSetBit(29)).isEqualTo(24);
|
||||||
|
assertThat(bitSet.previousSetBit(14)).isEqualTo(-1);
|
||||||
|
}
|
||||||
|
}
|
|
@ -15,4 +15,5 @@ This module contains articles about advanced topics about multithreading with co
|
||||||
- [The ABA Problem in Concurrency](https://www.baeldung.com/cs/aba-concurrency)
|
- [The ABA Problem in Concurrency](https://www.baeldung.com/cs/aba-concurrency)
|
||||||
- [Introduction to Lock-Free Data Structures](https://www.baeldung.com/lock-free-programming)
|
- [Introduction to Lock-Free Data Structures](https://www.baeldung.com/lock-free-programming)
|
||||||
- [Introduction to Exchanger in Java](https://www.baeldung.com/java-exchanger)
|
- [Introduction to Exchanger in Java](https://www.baeldung.com/java-exchanger)
|
||||||
|
- [Why Not To Start A Thread In The Constructor?](https://www.baeldung.com/java-thread-constructor)
|
||||||
- [[<-- previous]](/core-java-modules/core-java-concurrency-advanced-2)
|
- [[<-- previous]](/core-java-modules/core-java-concurrency-advanced-2)
|
||||||
|
|
|
@ -3,10 +3,12 @@
|
||||||
This module contains articles about basic Java concurrency
|
This module contains articles about basic Java concurrency
|
||||||
|
|
||||||
### Relevant Articles:
|
### Relevant Articles:
|
||||||
|
|
||||||
- [How to Delay Code Execution in Java](https://www.baeldung.com/java-delay-code-execution)
|
- [How to Delay Code Execution in Java](https://www.baeldung.com/java-delay-code-execution)
|
||||||
- [wait and notify() Methods in Java](https://www.baeldung.com/java-wait-notify)
|
- [wait and notify() Methods in Java](https://www.baeldung.com/java-wait-notify)
|
||||||
- [Difference Between Wait and Sleep in Java](https://www.baeldung.com/java-wait-and-sleep)
|
- [Difference Between Wait and Sleep in Java](https://www.baeldung.com/java-wait-and-sleep)
|
||||||
- [Guide to the Synchronized Keyword in Java](https://www.baeldung.com/java-synchronized)
|
- [Guide to the Synchronized Keyword in Java](https://www.baeldung.com/java-synchronized)
|
||||||
- [Life Cycle of a Thread in Java](https://www.baeldung.com/java-thread-lifecycle)
|
- [Life Cycle of a Thread in Java](https://www.baeldung.com/java-thread-lifecycle)
|
||||||
- [Guide to AtomicMarkableReference](https://www.baeldung.com/java-atomicmarkablereference)
|
- [Guide to AtomicMarkableReference](https://www.baeldung.com/java-atomicmarkablereference)
|
||||||
|
- [Why are Local Variables Thread-Safe in Java](https://www.baeldung.com/java-local-variables-thread-safe)
|
||||||
- [[<-- Prev]](/core-java-modules/core-java-concurrency-basic)
|
- [[<-- Prev]](/core-java-modules/core-java-concurrency-basic)
|
||||||
|
|
|
@ -0,0 +1,31 @@
|
||||||
|
package com.baeldung.consoleout;
|
||||||
|
|
||||||
|
import java.io.Console;
|
||||||
|
|
||||||
|
public class ConsoleAndOut {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
try {
|
||||||
|
printConsoleObject();
|
||||||
|
readPasswordFromConsole();
|
||||||
|
} catch (Exception ex) {
|
||||||
|
// Eating NullPointerExcpetion which will occur when this
|
||||||
|
// program will be run from mediums other than console
|
||||||
|
}
|
||||||
|
printSysOut();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void printConsoleObject() {
|
||||||
|
Console console = System.console();
|
||||||
|
console.writer().print(console);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void readPasswordFromConsole() {
|
||||||
|
Console console = System.console();
|
||||||
|
char[] password = console.readPassword("Enter password: ");
|
||||||
|
console.printf(String.valueOf(password));
|
||||||
|
}
|
||||||
|
|
||||||
|
static void printSysOut() {
|
||||||
|
System.out.println(System.out);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,27 @@
|
||||||
|
package com.baeldung.consoleout;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
class ConsoleAndOutUnitTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void whenRetreivingConsole_thenPrintConsoleObject() {
|
||||||
|
assertThrows(NullPointerException.class, () -> {
|
||||||
|
ConsoleAndOut.printConsoleObject();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void whenReadingPassword_thenReadPassword() {
|
||||||
|
assertThrows(NullPointerException.class, () -> {
|
||||||
|
ConsoleAndOut.readPasswordFromConsole();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void whenRetrievingSysOut_thenPrintSysOutObject() {
|
||||||
|
ConsoleAndOut.printSysOut();
|
||||||
|
}
|
||||||
|
}
|
|
@ -2,6 +2,7 @@
|
||||||
This module contains articles about date operations in Java.
|
This module contains articles about date operations in Java.
|
||||||
|
|
||||||
### Relevant Articles:
|
### Relevant Articles:
|
||||||
|
|
||||||
- [Get the Current Date Prior to Java 8](https://www.baeldung.com/java-get-the-current-date-legacy)
|
- [Get the Current Date Prior to Java 8](https://www.baeldung.com/java-get-the-current-date-legacy)
|
||||||
- [Skipping Weekends While Adding Days to LocalDate in Java 8](https://www.baeldung.com/java-localdate-add-days-skip-weekends)
|
- [Skipping Weekends While Adding Days to LocalDate in Java 8](https://www.baeldung.com/java-localdate-add-days-skip-weekends)
|
||||||
- [Checking If Two Java Dates Are on the Same Day](https://www.baeldung.com/java-check-two-dates-on-same-day)
|
- [Checking If Two Java Dates Are on the Same Day](https://www.baeldung.com/java-check-two-dates-on-same-day)
|
||||||
|
@ -9,4 +10,5 @@ This module contains articles about date operations in Java.
|
||||||
- [How to Set the JVM Time Zone](https://www.baeldung.com/java-jvm-time-zone)
|
- [How to Set the JVM Time Zone](https://www.baeldung.com/java-jvm-time-zone)
|
||||||
- [How to determine day of week by passing specific date in Java?](https://www.baeldung.com/java-get-day-of-week)
|
- [How to determine day of week by passing specific date in Java?](https://www.baeldung.com/java-get-day-of-week)
|
||||||
- [Finding Leap Years in Java](https://www.baeldung.com/java-leap-year)
|
- [Finding Leap Years in Java](https://www.baeldung.com/java-leap-year)
|
||||||
|
- [Getting the Week Number From Any Date](https://www.baeldung.com/java-get-week-number)
|
||||||
- [[<-- Prev]](/core-java-modules/core-java-date-operations-1)
|
- [[<-- Prev]](/core-java-modules/core-java-date-operations-1)
|
||||||
|
|
|
@ -12,3 +12,5 @@ This module contains articles about core java exceptions
|
||||||
- [Java – Try with Resources](https://www.baeldung.com/java-try-with-resources)
|
- [Java – Try with Resources](https://www.baeldung.com/java-try-with-resources)
|
||||||
- [Java Global Exception Handler](https://www.baeldung.com/java-global-exception-handler)
|
- [Java Global Exception Handler](https://www.baeldung.com/java-global-exception-handler)
|
||||||
- [How to Find an Exception’s Root Cause in Java](https://www.baeldung.com/java-exception-root-cause)
|
- [How to Find an Exception’s Root Cause in Java](https://www.baeldung.com/java-exception-root-cause)
|
||||||
|
- [Java IOException “Too many open files”](https://www.baeldung.com/java-too-many-open-files)
|
||||||
|
- [When Does Java Throw the ExceptionInInitializerError?](https://www.baeldung.com/java-exceptionininitializererror)
|
||||||
|
|
|
@ -13,4 +13,4 @@ This module contains articles about core Java input and output (IO)
|
||||||
- [How to Copy a File with Java](https://www.baeldung.com/java-copy-file)
|
- [How to Copy a File with Java](https://www.baeldung.com/java-copy-file)
|
||||||
- [Create a Directory in Java](https://www.baeldung.com/java-create-directory)
|
- [Create a Directory in Java](https://www.baeldung.com/java-create-directory)
|
||||||
- [Java IO vs NIO](https://www.baeldung.com/java-io-vs-nio)
|
- [Java IO vs NIO](https://www.baeldung.com/java-io-vs-nio)
|
||||||
- [[<-- Prev]](/core-java-modules/core-java-io)
|
- [[<-- Prev]](/core-java-modules/core-java-io)[[More -->]](/core-java-modules/core-java-io-3)
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
## Core Java IO
|
||||||
|
|
||||||
|
This module contains articles about core Java input and output (IO)
|
||||||
|
|
||||||
|
### Relevant Articles:
|
||||||
|
|
||||||
|
- [Java – Create a File](https://www.baeldung.com/java-how-to-create-a-file)
|
||||||
|
- [Check If a Directory Is Empty in Java](https://www.baeldung.com/java-check-empty-directory)
|
||||||
|
- [[<-- Prev]](/core-java-modules/core-java-io-2)
|
|
@ -0,0 +1,59 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project
|
||||||
|
xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<artifactId>core-java-io-3</artifactId>
|
||||||
|
<version>0.1.0-SNAPSHOT</version>
|
||||||
|
<name>core-java-io-3</name>
|
||||||
|
<packaging>jar</packaging>
|
||||||
|
<parent>
|
||||||
|
<groupId>com.baeldung.core-java-modules</groupId>
|
||||||
|
<artifactId>core-java-modules</artifactId>
|
||||||
|
<version>0.0.1-SNAPSHOT</version>
|
||||||
|
<relativePath>../</relativePath>
|
||||||
|
</parent>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<!-- utils -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.google.guava</groupId>
|
||||||
|
<artifactId>guava</artifactId>
|
||||||
|
<version>${guava.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<!-- utils -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>commons-io</groupId>
|
||||||
|
<artifactId>commons-io</artifactId>
|
||||||
|
<version>${commons-io.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<!-- logging -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>log4j</groupId>
|
||||||
|
<artifactId>log4j</artifactId>
|
||||||
|
<version>${log4j.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency> <!-- needed to bridge to slf4j for projects that use the log4j APIs directly -->
|
||||||
|
<groupId>org.slf4j</groupId>
|
||||||
|
<artifactId>log4j-over-slf4j</artifactId>
|
||||||
|
<version>${org.slf4j.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<!-- test scoped -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.assertj</groupId>
|
||||||
|
<artifactId>assertj-core</artifactId>
|
||||||
|
<version>${assertj.version}</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
</build>
|
||||||
|
|
||||||
|
<properties>
|
||||||
|
<assertj.version>3.6.1</assertj.version>
|
||||||
|
</properties>
|
||||||
|
|
||||||
|
</project>
|
|
@ -0,0 +1,50 @@
|
||||||
|
package com.baeldung.createfile;
|
||||||
|
|
||||||
|
import org.apache.commons.io.FileUtils;
|
||||||
|
import org.junit.jupiter.api.AfterEach;
|
||||||
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.nio.file.Path;
|
||||||
|
import java.nio.file.Paths;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||||
|
|
||||||
|
public class CreateFileUnitTest {
|
||||||
|
|
||||||
|
private final String FILE_NAME = "src/test/resources/fileToCreate.txt";
|
||||||
|
|
||||||
|
@AfterEach
|
||||||
|
@BeforeEach
|
||||||
|
public void cleanUpFiles() {
|
||||||
|
File targetFile = new File(FILE_NAME);
|
||||||
|
targetFile.delete();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenUsingNio_whenCreatingFile_thenCorrect() throws IOException {
|
||||||
|
Path newFilePath = Paths.get(FILE_NAME);
|
||||||
|
Files.createFile(newFilePath);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenUsingFile_whenCreatingFile_thenCorrect() throws IOException {
|
||||||
|
File newFile = new File(FILE_NAME);
|
||||||
|
boolean success = newFile.createNewFile();
|
||||||
|
assertTrue(success);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenUsingGuava_whenCreatingFile_thenCorrect() throws IOException {
|
||||||
|
com.google.common.io.Files.touch(new File(FILE_NAME));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenUsingCommonsIo_whenCreatingFile_thenCorrect() throws IOException {
|
||||||
|
FileUtils.touch(new File(FILE_NAME));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,63 @@
|
||||||
|
package com.baeldung.emptiness;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.nio.file.DirectoryStream;
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.nio.file.Path;
|
||||||
|
import java.nio.file.Paths;
|
||||||
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
|
public class DirectoryEmptinessUnitTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenPath_whenInvalid_thenReturnsFalse() throws IOException {
|
||||||
|
assertThat(isEmpty(Paths.get("invalid-addr"))).isFalse();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenPath_whenNotDirectory_thenReturnsFalse() throws IOException {
|
||||||
|
Path aFile = Paths.get(getClass().getResource("/notDir.txt").getPath());
|
||||||
|
assertThat(isEmpty(aFile)).isFalse();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenPath_whenNotEmptyDir_thenReturnsFalse() throws IOException {
|
||||||
|
Path currentDir = new File("").toPath().toAbsolutePath();
|
||||||
|
assertThat(isEmpty(currentDir)).isFalse();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenPath_whenIsEmpty_thenReturnsTrue() throws Exception {
|
||||||
|
Path path = Files.createTempDirectory("baeldung-empty");
|
||||||
|
assertThat(isEmpty(path)).isTrue();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static boolean isEmpty(Path path) throws IOException {
|
||||||
|
if (Files.isDirectory(path)) {
|
||||||
|
try (DirectoryStream<Path> directory = Files.newDirectoryStream(path)) {
|
||||||
|
return !directory.iterator().hasNext();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static boolean isEmpty2(Path path) throws IOException {
|
||||||
|
if (Files.isDirectory(path)) {
|
||||||
|
try (Stream<Path> entries = Files.list(path)) {
|
||||||
|
return !entries.findFirst().isPresent();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static boolean isEmptyInefficient(Path path) {
|
||||||
|
return path.toFile().listFiles().length == 0;
|
||||||
|
}
|
||||||
|
}
|
|
@ -7,7 +7,6 @@ This module contains articles about core Java input/output(IO) APIs.
|
||||||
- [A Guide to the Java FileReader Class](https://www.baeldung.com/java-filereader)
|
- [A Guide to the Java FileReader Class](https://www.baeldung.com/java-filereader)
|
||||||
- [The Java File Class](https://www.baeldung.com/java-io-file)
|
- [The Java File Class](https://www.baeldung.com/java-io-file)
|
||||||
- [Java FileWriter](https://www.baeldung.com/java-filewriter)
|
- [Java FileWriter](https://www.baeldung.com/java-filewriter)
|
||||||
- [Differences Between the Java WatchService API and the Apache Commons IO Monitor Library](https://www.baeldung.com/java-watchservice-vs-apache-commons-io-monitor-library)
|
|
||||||
- [Comparing getPath(), getAbsolutePath(), and getCanonicalPath() in Java](https://www.baeldung.com/java-path)
|
- [Comparing getPath(), getAbsolutePath(), and getCanonicalPath() in Java](https://www.baeldung.com/java-path)
|
||||||
- [Quick Use of FilenameFilter](https://www.baeldung.com/java-filename-filter)
|
- [Quick Use of FilenameFilter](https://www.baeldung.com/java-filename-filter)
|
||||||
- [Guide to BufferedReader](https://www.baeldung.com/java-buffered-reader)
|
- [Guide to BufferedReader](https://www.baeldung.com/java-buffered-reader)
|
||||||
|
|
|
@ -8,4 +8,6 @@ This module contains articles about working with the Java Virtual Machine (JVM).
|
||||||
- [Measuring Object Sizes in the JVM](https://www.baeldung.com/jvm-measuring-object-sizes)
|
- [Measuring Object Sizes in the JVM](https://www.baeldung.com/jvm-measuring-object-sizes)
|
||||||
- [Adding Shutdown Hooks for JVM Applications](https://www.baeldung.com/jvm-shutdown-hooks)
|
- [Adding Shutdown Hooks for JVM Applications](https://www.baeldung.com/jvm-shutdown-hooks)
|
||||||
- [boolean and boolean[] Memory Layout in the JVM](https://www.baeldung.com/jvm-boolean-memory-layout)
|
- [boolean and boolean[] Memory Layout in the JVM](https://www.baeldung.com/jvm-boolean-memory-layout)
|
||||||
|
- [Where Is the Array Length Stored in JVM?](https://www.baeldung.com/java-jvm-array-length)
|
||||||
|
- [Memory Address of Objects in Java](https://www.baeldung.com/java-object-memory-address)
|
||||||
- More articles: [[<-- prev]](/core-java-modules/core-java-jvm)
|
- More articles: [[<-- prev]](/core-java-modules/core-java-jvm)
|
|
@ -2,4 +2,6 @@
|
||||||
|
|
||||||
This module contains articles about core features in the Java language
|
This module contains articles about core features in the Java language
|
||||||
|
|
||||||
|
- [Class.isInstance vs Class.isAssignableFrom](https://www.baeldung.com/java-isinstance-isassignablefrom)
|
||||||
|
- [Converting a Java String Into a Boolean](https://www.baeldung.com/java-string-to-boolean)
|
||||||
- [[<-- Prev]](/core-java-modules/core-java-lang-2)
|
- [[<-- Prev]](/core-java-modules/core-java-lang-2)
|
||||||
|
|
|
@ -0,0 +1,23 @@
|
||||||
|
package com.baeldung.staticvariables;
|
||||||
|
|
||||||
|
public class StaticVariableDemo {
|
||||||
|
public static int i;
|
||||||
|
public static int j = 20;
|
||||||
|
public static int z;
|
||||||
|
|
||||||
|
static {
|
||||||
|
z = 30;
|
||||||
|
a = 40;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int a = 50;
|
||||||
|
|
||||||
|
public static final int b = 100;
|
||||||
|
|
||||||
|
public StaticVariableDemo() {
|
||||||
|
}
|
||||||
|
|
||||||
|
static class Nested {
|
||||||
|
public static String nestedClassStaticVariable = "test";
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,113 @@
|
||||||
|
package com.baeldung.staticvariables;
|
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
|
import java.lang.reflect.Field;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
public class StaticVariableUnitTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void initializeStaticVariable_checkAssignedValues() {
|
||||||
|
|
||||||
|
try {
|
||||||
|
Class<?> staticVariableDemo = this.getClass()
|
||||||
|
.getClassLoader()
|
||||||
|
.loadClass("com.baeldung.staticvariables.StaticVariableDemo");
|
||||||
|
|
||||||
|
Field field1 = staticVariableDemo.getField("i");
|
||||||
|
|
||||||
|
assertThat(field1.getInt(staticVariableDemo)).isEqualTo(0);
|
||||||
|
|
||||||
|
Field field2 = staticVariableDemo.getField("j");
|
||||||
|
|
||||||
|
assertThat(field2.getInt(staticVariableDemo)).isEqualTo(20);
|
||||||
|
|
||||||
|
} catch (ClassNotFoundException | NoSuchFieldException | SecurityException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
} catch (IllegalArgumentException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
} catch (IllegalAccessException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void initializeStaticVariable_checkStaticBlock() {
|
||||||
|
|
||||||
|
try {
|
||||||
|
Class<?> staticVariableDemo = this.getClass()
|
||||||
|
.getClassLoader()
|
||||||
|
.loadClass("com.baeldung.staticvariables.StaticVariableDemo");
|
||||||
|
|
||||||
|
Field field1 = staticVariableDemo.getField("z");
|
||||||
|
|
||||||
|
assertThat(field1.getInt(staticVariableDemo)).isEqualTo(30);
|
||||||
|
|
||||||
|
Field field2 = staticVariableDemo.getField("a");
|
||||||
|
|
||||||
|
assertThat(field2.getInt(staticVariableDemo)).isEqualTo(50);
|
||||||
|
|
||||||
|
} catch (ClassNotFoundException | NoSuchFieldException | SecurityException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
} catch (IllegalArgumentException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
} catch (IllegalAccessException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void initializeStaticVariable_checkFinalValues() {
|
||||||
|
|
||||||
|
try {
|
||||||
|
Class<?> staticVariableDemo = this.getClass()
|
||||||
|
.getClassLoader()
|
||||||
|
.loadClass("com.baeldung.staticvariables.StaticVariableDemo");
|
||||||
|
|
||||||
|
Field field1 = staticVariableDemo.getField("b");
|
||||||
|
|
||||||
|
assertThat(field1.getInt(staticVariableDemo)).isEqualTo(100);
|
||||||
|
|
||||||
|
} catch (ClassNotFoundException | NoSuchFieldException | SecurityException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
} catch (IllegalArgumentException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
} catch (IllegalAccessException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void initializeStaticVariable_checkInnerClassValues() {
|
||||||
|
|
||||||
|
try {
|
||||||
|
Class<?> staticVariableDemo = this.getClass()
|
||||||
|
.getClassLoader()
|
||||||
|
.loadClass("com.baeldung.staticvariables.StaticVariableDemo");
|
||||||
|
|
||||||
|
Class<?>[] nestedClasses = staticVariableDemo.getClasses();
|
||||||
|
|
||||||
|
for (Class<?> nestedClass : nestedClasses) {
|
||||||
|
if (nestedClass.getName()
|
||||||
|
.equals("Nested")) {
|
||||||
|
|
||||||
|
Field field1 = nestedClass.getField("nestedClassStaticVariable");
|
||||||
|
assertThat(field1.get(nestedClass)).isEqualTo("test");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (ClassNotFoundException | NoSuchFieldException | SecurityException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
} catch (IllegalArgumentException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
} catch (IllegalAccessException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -3,7 +3,9 @@
|
||||||
This module contains articles about methods in Java
|
This module contains articles about methods in Java
|
||||||
|
|
||||||
### Relevant Articles:
|
### Relevant Articles:
|
||||||
|
|
||||||
- [Methods in Java](https://www.baeldung.com/java-methods)
|
- [Methods in Java](https://www.baeldung.com/java-methods)
|
||||||
- [Method Overloading and Overriding in Java](https://www.baeldung.com/java-method-overload-override)
|
- [Method Overloading and Overriding in Java](https://www.baeldung.com/java-method-overload-override)
|
||||||
- [Java equals() and hashCode() Contracts](https://www.baeldung.com/java-equals-hashcode-contracts)
|
- [Java equals() and hashCode() Contracts](https://www.baeldung.com/java-equals-hashcode-contracts)
|
||||||
- [Guide to hashCode() in Java](https://www.baeldung.com/java-hashcode)
|
- [Guide to hashCode() in Java](https://www.baeldung.com/java-hashcode)
|
||||||
|
- [The Covariant Return Type in Java](https://www.baeldung.com/java-covariant-return-type)
|
||||||
|
|
|
@ -12,4 +12,5 @@ This module contains articles about networking in Java
|
||||||
- [Authentication with HttpUrlConnection](https://www.baeldung.com/java-http-url-connection)
|
- [Authentication with HttpUrlConnection](https://www.baeldung.com/java-http-url-connection)
|
||||||
- [Download a File from an URL in Java](https://www.baeldung.com/java-download-file)
|
- [Download a File from an URL in Java](https://www.baeldung.com/java-download-file)
|
||||||
- [Handling java.net.ConnectException](https://www.baeldung.com/java-net-connectexception)
|
- [Handling java.net.ConnectException](https://www.baeldung.com/java-net-connectexception)
|
||||||
|
- [Getting MAC addresses in Java](https://www.baeldung.com/java-mac-address)
|
||||||
- [[<-- Prev]](/core-java-modules/core-java-networking)
|
- [[<-- Prev]](/core-java-modules/core-java-networking)
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
### Relevant Articles:
|
||||||
|
|
||||||
|
- [Reading the Value of ‘private’ Fields from a Different Class in Java](https://www.baeldung.com/java-reflection-read-private-field-value)
|
|
@ -8,5 +8,4 @@
|
||||||
- [Changing Annotation Parameters At Runtime](http://www.baeldung.com/java-reflection-change-annotation-params)
|
- [Changing Annotation Parameters At Runtime](http://www.baeldung.com/java-reflection-change-annotation-params)
|
||||||
- [Dynamic Proxies in Java](http://www.baeldung.com/java-dynamic-proxies)
|
- [Dynamic Proxies in Java](http://www.baeldung.com/java-dynamic-proxies)
|
||||||
- [What Causes java.lang.reflect.InvocationTargetException?](https://www.baeldung.com/java-lang-reflect-invocationtargetexception)
|
- [What Causes java.lang.reflect.InvocationTargetException?](https://www.baeldung.com/java-lang-reflect-invocationtargetexception)
|
||||||
- [How to Find all Getters Returning Null](http://www.baeldung.com/java-getters-returning-null)
|
|
||||||
- [How to Get a Name of a Method Being Executed?](http://www.baeldung.com/java-name-of-executing-method)
|
- [How to Get a Name of a Method Being Executed?](http://www.baeldung.com/java-name-of-executing-method)
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
## Core Java 8 Cookbooks and Examples
|
## Core Java 8 Cookbooks and Examples
|
||||||
|
|
||||||
### Relevant Articles:
|
### Relevant Articles:
|
||||||
|
|
||||||
- [An Overview of Regular Expressions Performance in Java](https://www.baeldung.com/java-regex-performance)
|
- [An Overview of Regular Expressions Performance in Java](https://www.baeldung.com/java-regex-performance)
|
||||||
- [A Guide To Java Regular Expressions API](http://www.baeldung.com/regular-expressions-java)
|
- [A Guide To Java Regular Expressions API](http://www.baeldung.com/regular-expressions-java)
|
||||||
- [Guide to Escaping Characters in Java RegExps](http://www.baeldung.com/java-regexp-escape-char)
|
- [Guide to Escaping Characters in Java RegExps](http://www.baeldung.com/java-regexp-escape-char)
|
||||||
|
@ -11,3 +12,4 @@
|
||||||
- [How to Use Regular Expressions to Replace Tokens in Strings](https://www.baeldung.com/java-regex-token-replacement)
|
- [How to Use Regular Expressions to Replace Tokens in Strings](https://www.baeldung.com/java-regex-token-replacement)
|
||||||
- [Regular Expressions \s and \s+ in Java](https://www.baeldung.com/java-regex-s-splus)
|
- [Regular Expressions \s and \s+ in Java](https://www.baeldung.com/java-regex-s-splus)
|
||||||
- [Validate Phone Numbers With Java Regex](https://www.baeldung.com/java-regex-validate-phone-numbers)
|
- [Validate Phone Numbers With Java Regex](https://www.baeldung.com/java-regex-validate-phone-numbers)
|
||||||
|
- [How to Count the Number of Matches for a Regex?](https://www.baeldung.com/java-count-regex-matches)
|
||||||
|
|
|
@ -9,4 +9,5 @@ This module contains articles about core Java Security
|
||||||
- [Hashing a Password in Java](https://www.baeldung.com/java-password-hashing)
|
- [Hashing a Password in Java](https://www.baeldung.com/java-password-hashing)
|
||||||
- [SHA-256 and SHA3-256 Hashing in Java](https://www.baeldung.com/sha-256-hashing-java)
|
- [SHA-256 and SHA3-256 Hashing in Java](https://www.baeldung.com/sha-256-hashing-java)
|
||||||
- [Checksums in Java](https://www.baeldung.com/java-checksums)
|
- [Checksums in Java](https://www.baeldung.com/java-checksums)
|
||||||
|
- [How to Read PEM File to Get Public and Private Keys](https://www.baeldung.com/java-read-pem-file-keys)
|
||||||
- More articles: [[<-- prev]](/core-java-modules/core-java-security)
|
- More articles: [[<-- prev]](/core-java-modules/core-java-security)
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
### Relevant Articles:
|
||||||
|
|
||||||
|
- [Version Comparison in Java](https://www.baeldung.com/java-comparing-versions)
|
|
@ -72,6 +72,7 @@
|
||||||
|
|
||||||
<module>core-java-io</module>
|
<module>core-java-io</module>
|
||||||
<module>core-java-io-2</module>
|
<module>core-java-io-2</module>
|
||||||
|
<module>core-java-io-3</module>
|
||||||
<module>core-java-io-apis</module>
|
<module>core-java-io-apis</module>
|
||||||
<module>core-java-io-conversions</module>
|
<module>core-java-io-conversions</module>
|
||||||
<module>core-java-io-conversions-2</module>
|
<module>core-java-io-conversions-2</module>
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
This module contains articles about core Kotlin collections.
|
This module contains articles about core Kotlin collections.
|
||||||
|
|
||||||
### Relevant articles:
|
### Relevant articles:
|
||||||
|
|
||||||
- [Split a List Into Parts in Kotlin](https://www.baeldung.com/kotlin-split-list-into-parts)
|
- [Split a List Into Parts in Kotlin](https://www.baeldung.com/kotlin-split-list-into-parts)
|
||||||
- [Finding an Element in a List Using Kotlin](https://www.baeldung.com/kotlin-finding-element-in-list)
|
- [Finding an Element in a List Using Kotlin](https://www.baeldung.com/kotlin-finding-element-in-list)
|
||||||
- [Overview of Kotlin Collections API](https://www.baeldung.com/kotlin-collections-api)
|
- [Overview of Kotlin Collections API](https://www.baeldung.com/kotlin-collections-api)
|
||||||
|
@ -12,3 +13,4 @@ This module contains articles about core Kotlin collections.
|
||||||
- [Difference between fold and reduce in Kotlin](https://www.baeldung.com/kotlin/fold-vs-reduce)
|
- [Difference between fold and reduce in Kotlin](https://www.baeldung.com/kotlin/fold-vs-reduce)
|
||||||
- [Guide to Sorting in Kotlin](https://www.baeldung.com/kotlin-sort)
|
- [Guide to Sorting in Kotlin](https://www.baeldung.com/kotlin-sort)
|
||||||
- [Working With Lists in Kotlin](https://www.baeldung.com/kotlin/lists)
|
- [Working With Lists in Kotlin](https://www.baeldung.com/kotlin/lists)
|
||||||
|
- [Iterating Collections by Index in Kotlin](https://www.baeldung.com/kotlin/iterating-collections-by-index)
|
||||||
|
|
|
@ -0,0 +1,33 @@
|
||||||
|
package com.baeldung.index
|
||||||
|
|
||||||
|
fun main() {
|
||||||
|
|
||||||
|
// Index only
|
||||||
|
val colors = listOf("Red", "Green", "Blue")
|
||||||
|
for (i in colors.indices) {
|
||||||
|
println(colors[i])
|
||||||
|
}
|
||||||
|
|
||||||
|
val colorArray = arrayOf("Red", "Green", "Blue")
|
||||||
|
for (i in colorArray.indices) {
|
||||||
|
println(colorArray[i])
|
||||||
|
}
|
||||||
|
|
||||||
|
(0 until colors.size).forEach { println(colors[it]) }
|
||||||
|
for (i in 0 until colors.size) {
|
||||||
|
println(colors[i])
|
||||||
|
}
|
||||||
|
|
||||||
|
// Index and Value
|
||||||
|
colors.forEachIndexed { i, v -> println("The value for index $i is $v") }
|
||||||
|
for (indexedValue in colors.withIndex()) {
|
||||||
|
println("The value for index ${indexedValue.index} is ${indexedValue.value}")
|
||||||
|
}
|
||||||
|
|
||||||
|
for ((i, v) in colors.withIndex()) {
|
||||||
|
println("The value for index $i is $v")
|
||||||
|
}
|
||||||
|
|
||||||
|
colors.filterIndexed { i, _ -> i % 2 == 0 }
|
||||||
|
colors.filterIndexed { _, v -> v == "RED" }
|
||||||
|
}
|
|
@ -7,4 +7,5 @@ This module contains articles about Object-Oriented Programming in Kotlin
|
||||||
- [Generics in Kotlin](https://www.baeldung.com/kotlin-generics)
|
- [Generics in Kotlin](https://www.baeldung.com/kotlin-generics)
|
||||||
- [Delegated Properties in Kotlin](https://www.baeldung.com/kotlin-delegated-properties)
|
- [Delegated Properties in Kotlin](https://www.baeldung.com/kotlin-delegated-properties)
|
||||||
- [Delegation Pattern in Kotlin](https://www.baeldung.com/kotlin-delegation-pattern)
|
- [Delegation Pattern in Kotlin](https://www.baeldung.com/kotlin-delegation-pattern)
|
||||||
|
- [Anonymous Inner Classes in Kotlin](https://www.baeldung.com/kotlin/anonymous-inner-classes)
|
||||||
- [[<-- Prev]](/core-kotlin-modules/core-kotlin-lang-oop)
|
- [[<-- Prev]](/core-kotlin-modules/core-kotlin-lang-oop)
|
||||||
|
|
|
@ -0,0 +1,41 @@
|
||||||
|
package com.baeldung.anonymous
|
||||||
|
|
||||||
|
import java.io.Serializable
|
||||||
|
import java.nio.channels.Channel
|
||||||
|
|
||||||
|
fun main() {
|
||||||
|
val channel = object : Channel {
|
||||||
|
override fun isOpen() = false
|
||||||
|
|
||||||
|
override fun close() {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
val maxEntries = 10
|
||||||
|
val lruCache = object : LinkedHashMap<String, Int>(10, 0.75f) {
|
||||||
|
|
||||||
|
override fun removeEldestEntry(eldest: MutableMap.MutableEntry<String, Int>?): Boolean {
|
||||||
|
return size > maxEntries
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
val map = object : LinkedHashMap<String, Int>() {
|
||||||
|
// omitted
|
||||||
|
}
|
||||||
|
|
||||||
|
val serializableChannel = object : Channel, Serializable {
|
||||||
|
override fun isOpen(): Boolean {
|
||||||
|
TODO("Not yet implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun close() {
|
||||||
|
TODO("Not yet implemented")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
val obj = object {
|
||||||
|
val question = "answer"
|
||||||
|
val answer = 42
|
||||||
|
}
|
||||||
|
println("The ${obj.question} is ${obj.answer}")
|
||||||
|
}
|
|
@ -11,3 +11,4 @@ This module contains articles about data structures in Java
|
||||||
- [Introduction to Big Queue](https://www.baeldung.com/java-big-queue)
|
- [Introduction to Big Queue](https://www.baeldung.com/java-big-queue)
|
||||||
- [Guide to AVL Trees in Java](https://www.baeldung.com/java-avl-trees)
|
- [Guide to AVL Trees in Java](https://www.baeldung.com/java-avl-trees)
|
||||||
- [Graphs in Java](https://www.baeldung.com/java-graphs)
|
- [Graphs in Java](https://www.baeldung.com/java-graphs)
|
||||||
|
- [Implementing a Ring Buffer in Java](https://www.baeldung.com/java-ring-buffer)
|
||||||
|
|
|
@ -0,0 +1,46 @@
|
||||||
|
package com.baeldung.ddd.order.config;
|
||||||
|
|
||||||
|
import org.bson.Document;
|
||||||
|
import org.joda.money.CurrencyUnit;
|
||||||
|
import org.joda.money.Money;
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import org.springframework.core.convert.converter.Converter;
|
||||||
|
import org.springframework.data.convert.ReadingConverter;
|
||||||
|
import org.springframework.data.mongodb.core.convert.MongoCustomConversions;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.util.Collections;
|
||||||
|
|
||||||
|
@Configuration
|
||||||
|
public class CustomMongoConfiguration {
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public MongoCustomConversions customConversions() {
|
||||||
|
return new MongoCustomConversions(Collections.singletonList(DocumentToMoneyConverter.INSTANCE));
|
||||||
|
}
|
||||||
|
|
||||||
|
@ReadingConverter
|
||||||
|
enum DocumentToMoneyConverter implements Converter<Document, Money> {
|
||||||
|
|
||||||
|
INSTANCE;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Money convert(Document source) {
|
||||||
|
Document money = source.get("money", Document.class);
|
||||||
|
|
||||||
|
return Money.of(getCurrency(money), getAmount(money));
|
||||||
|
}
|
||||||
|
|
||||||
|
private CurrencyUnit getCurrency(Document money) {
|
||||||
|
Document currency = money.get("currency", Document.class);
|
||||||
|
String currencyCode = currency.getString("code");
|
||||||
|
return CurrencyUnit.of(currencyCode);
|
||||||
|
}
|
||||||
|
|
||||||
|
private BigDecimal getAmount(Document money) {
|
||||||
|
String amount = money.getString("amount");
|
||||||
|
return BigDecimal.valueOf(Double.parseDouble(amount));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,19 +1,24 @@
|
||||||
package com.baeldung.ddd.order.jpa;
|
package com.baeldung.ddd.order.jpa;
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
|
||||||
import java.util.Arrays;
|
|
||||||
|
|
||||||
import org.junit.jupiter.api.DisplayName;
|
import org.junit.jupiter.api.DisplayName;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.boot.test.context.SpringBootTest;
|
import org.springframework.boot.test.context.SpringBootTest;
|
||||||
import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
|
import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
|
/*
|
||||||
|
To run this test we need to run the databases first.
|
||||||
|
A dedicated docker-compose.yml file is located under the resources directory.
|
||||||
|
We can run it by simple executing `docker-compose up`.
|
||||||
|
*/
|
||||||
@SpringJUnitConfig
|
@SpringJUnitConfig
|
||||||
@SpringBootTest
|
@SpringBootTest
|
||||||
public class PersistOrderIntegrationTest {
|
public class PersistOrderLiveTest {
|
||||||
@Autowired
|
@Autowired
|
||||||
private JpaOrderRepository repository;
|
private JpaOrderRepository repository;
|
||||||
|
|
|
@ -17,9 +17,14 @@ import com.baeldung.ddd.order.Order;
|
||||||
import com.baeldung.ddd.order.OrderLine;
|
import com.baeldung.ddd.order.OrderLine;
|
||||||
import com.baeldung.ddd.order.Product;
|
import com.baeldung.ddd.order.Product;
|
||||||
|
|
||||||
|
/*
|
||||||
|
To run this test we need to run the databases first.
|
||||||
|
A dedicated docker-compose.yml file is located under the resources directory.
|
||||||
|
We can run it by simple executing `docker-compose up`.
|
||||||
|
*/
|
||||||
@SpringJUnitConfig
|
@SpringJUnitConfig
|
||||||
@SpringBootTest
|
@SpringBootTest
|
||||||
public class OrderMongoIntegrationTest {
|
public class OrderMongoLiveTest {
|
||||||
@Autowired
|
@Autowired
|
||||||
private OrderMongoRepository repo;
|
private OrderMongoRepository repo;
|
||||||
|
|
|
@ -18,10 +18,15 @@ import com.baeldung.dddhexagonalspring.domain.Product;
|
||||||
import com.baeldung.dddhexagonalspring.domain.repository.OrderRepository;
|
import com.baeldung.dddhexagonalspring.domain.repository.OrderRepository;
|
||||||
import com.baeldung.dddhexagonalspring.infrastracture.repository.cassandra.SpringDataCassandraOrderRepository;
|
import com.baeldung.dddhexagonalspring.infrastracture.repository.cassandra.SpringDataCassandraOrderRepository;
|
||||||
|
|
||||||
|
/*
|
||||||
|
To run this test we need to run the databases first.
|
||||||
|
A dedicated docker-compose.yml file is located under the resources directory.
|
||||||
|
We can run it by simple executing `docker-compose up`.
|
||||||
|
*/
|
||||||
@SpringJUnitConfig
|
@SpringJUnitConfig
|
||||||
@SpringBootTest
|
@SpringBootTest
|
||||||
@TestPropertySource("classpath:ddd-layers-test.properties")
|
@TestPropertySource("classpath:ddd-layers-test.properties")
|
||||||
class CassandraDbOrderRepositoryIntegrationTest {
|
class CassandraDbOrderRepositoryLiveTest {
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private SpringDataCassandraOrderRepository cassandraOrderRepository;
|
private SpringDataCassandraOrderRepository cassandraOrderRepository;
|
|
@ -18,10 +18,15 @@ import com.baeldung.dddhexagonalspring.domain.Product;
|
||||||
import com.baeldung.dddhexagonalspring.domain.repository.OrderRepository;
|
import com.baeldung.dddhexagonalspring.domain.repository.OrderRepository;
|
||||||
import com.baeldung.dddhexagonalspring.infrastracture.repository.mongo.SpringDataMongoOrderRepository;
|
import com.baeldung.dddhexagonalspring.infrastracture.repository.mongo.SpringDataMongoOrderRepository;
|
||||||
|
|
||||||
|
/*
|
||||||
|
To run this test we need to run the databases first.
|
||||||
|
A dedicated docker-compose.yml file is located under the resources directory.
|
||||||
|
We can run it by simple executing `docker-compose up`.
|
||||||
|
*/
|
||||||
@SpringJUnitConfig
|
@SpringJUnitConfig
|
||||||
@SpringBootTest
|
@SpringBootTest
|
||||||
@TestPropertySource("classpath:ddd-layers-test.properties")
|
@TestPropertySource("classpath:ddd-layers-test.properties")
|
||||||
class MongoDbOrderRepositoryIntegrationTest {
|
class MongoDbOrderRepositoryLiveTest {
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private SpringDataMongoOrderRepository mongoOrderRepository;
|
private SpringDataMongoOrderRepository mongoOrderRepository;
|
|
@ -0,0 +1,310 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
# Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
# or more contributor license agreements. See the NOTICE file
|
||||||
|
# distributed with this work for additional information
|
||||||
|
# regarding copyright ownership. The ASF licenses this file
|
||||||
|
# to you under the Apache License, Version 2.0 (the
|
||||||
|
# "License"); you may not use this file except in compliance
|
||||||
|
# with the License. You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# https://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing,
|
||||||
|
# software distributed under the License is distributed on an
|
||||||
|
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
# KIND, either express or implied. See the License for the
|
||||||
|
# specific language governing permissions and limitations
|
||||||
|
# under the License.
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
# Maven Start Up Batch script
|
||||||
|
#
|
||||||
|
# Required ENV vars:
|
||||||
|
# ------------------
|
||||||
|
# JAVA_HOME - location of a JDK home dir
|
||||||
|
#
|
||||||
|
# Optional ENV vars
|
||||||
|
# -----------------
|
||||||
|
# M2_HOME - location of maven2's installed home dir
|
||||||
|
# MAVEN_OPTS - parameters passed to the Java VM when running Maven
|
||||||
|
# e.g. to debug Maven itself, use
|
||||||
|
# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
|
||||||
|
# MAVEN_SKIP_RC - flag to disable loading of mavenrc files
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
if [ -z "$MAVEN_SKIP_RC" ] ; then
|
||||||
|
|
||||||
|
if [ -f /etc/mavenrc ] ; then
|
||||||
|
. /etc/mavenrc
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -f "$HOME/.mavenrc" ] ; then
|
||||||
|
. "$HOME/.mavenrc"
|
||||||
|
fi
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
# OS specific support. $var _must_ be set to either true or false.
|
||||||
|
cygwin=false;
|
||||||
|
darwin=false;
|
||||||
|
mingw=false
|
||||||
|
case "`uname`" in
|
||||||
|
CYGWIN*) cygwin=true ;;
|
||||||
|
MINGW*) mingw=true;;
|
||||||
|
Darwin*) darwin=true
|
||||||
|
# Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
|
||||||
|
# See https://developer.apple.com/library/mac/qa/qa1170/_index.html
|
||||||
|
if [ -z "$JAVA_HOME" ]; then
|
||||||
|
if [ -x "/usr/libexec/java_home" ]; then
|
||||||
|
export JAVA_HOME="`/usr/libexec/java_home`"
|
||||||
|
else
|
||||||
|
export JAVA_HOME="/Library/Java/Home"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ -z "$JAVA_HOME" ] ; then
|
||||||
|
if [ -r /etc/gentoo-release ] ; then
|
||||||
|
JAVA_HOME=`java-config --jre-home`
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z "$M2_HOME" ] ; then
|
||||||
|
## resolve links - $0 may be a link to maven's home
|
||||||
|
PRG="$0"
|
||||||
|
|
||||||
|
# need this for relative symlinks
|
||||||
|
while [ -h "$PRG" ] ; do
|
||||||
|
ls=`ls -ld "$PRG"`
|
||||||
|
link=`expr "$ls" : '.*-> \(.*\)$'`
|
||||||
|
if expr "$link" : '/.*' > /dev/null; then
|
||||||
|
PRG="$link"
|
||||||
|
else
|
||||||
|
PRG="`dirname "$PRG"`/$link"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
saveddir=`pwd`
|
||||||
|
|
||||||
|
M2_HOME=`dirname "$PRG"`/..
|
||||||
|
|
||||||
|
# make it fully qualified
|
||||||
|
M2_HOME=`cd "$M2_HOME" && pwd`
|
||||||
|
|
||||||
|
cd "$saveddir"
|
||||||
|
# echo Using m2 at $M2_HOME
|
||||||
|
fi
|
||||||
|
|
||||||
|
# For Cygwin, ensure paths are in UNIX format before anything is touched
|
||||||
|
if $cygwin ; then
|
||||||
|
[ -n "$M2_HOME" ] &&
|
||||||
|
M2_HOME=`cygpath --unix "$M2_HOME"`
|
||||||
|
[ -n "$JAVA_HOME" ] &&
|
||||||
|
JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
|
||||||
|
[ -n "$CLASSPATH" ] &&
|
||||||
|
CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
|
||||||
|
fi
|
||||||
|
|
||||||
|
# For Mingw, ensure paths are in UNIX format before anything is touched
|
||||||
|
if $mingw ; then
|
||||||
|
[ -n "$M2_HOME" ] &&
|
||||||
|
M2_HOME="`(cd "$M2_HOME"; pwd)`"
|
||||||
|
[ -n "$JAVA_HOME" ] &&
|
||||||
|
JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z "$JAVA_HOME" ]; then
|
||||||
|
javaExecutable="`which javac`"
|
||||||
|
if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then
|
||||||
|
# readlink(1) is not available as standard on Solaris 10.
|
||||||
|
readLink=`which readlink`
|
||||||
|
if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then
|
||||||
|
if $darwin ; then
|
||||||
|
javaHome="`dirname \"$javaExecutable\"`"
|
||||||
|
javaExecutable="`cd \"$javaHome\" && pwd -P`/javac"
|
||||||
|
else
|
||||||
|
javaExecutable="`readlink -f \"$javaExecutable\"`"
|
||||||
|
fi
|
||||||
|
javaHome="`dirname \"$javaExecutable\"`"
|
||||||
|
javaHome=`expr "$javaHome" : '\(.*\)/bin'`
|
||||||
|
JAVA_HOME="$javaHome"
|
||||||
|
export JAVA_HOME
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z "$JAVACMD" ] ; then
|
||||||
|
if [ -n "$JAVA_HOME" ] ; then
|
||||||
|
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
|
||||||
|
# IBM's JDK on AIX uses strange locations for the executables
|
||||||
|
JAVACMD="$JAVA_HOME/jre/sh/java"
|
||||||
|
else
|
||||||
|
JAVACMD="$JAVA_HOME/bin/java"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
JAVACMD="`which java`"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -x "$JAVACMD" ] ; then
|
||||||
|
echo "Error: JAVA_HOME is not defined correctly." >&2
|
||||||
|
echo " We cannot execute $JAVACMD" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z "$JAVA_HOME" ] ; then
|
||||||
|
echo "Warning: JAVA_HOME environment variable is not set."
|
||||||
|
fi
|
||||||
|
|
||||||
|
CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
|
||||||
|
|
||||||
|
# traverses directory structure from process work directory to filesystem root
|
||||||
|
# first directory with .mvn subdirectory is considered project base directory
|
||||||
|
find_maven_basedir() {
|
||||||
|
|
||||||
|
if [ -z "$1" ]
|
||||||
|
then
|
||||||
|
echo "Path not specified to find_maven_basedir"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
basedir="$1"
|
||||||
|
wdir="$1"
|
||||||
|
while [ "$wdir" != '/' ] ; do
|
||||||
|
if [ -d "$wdir"/.mvn ] ; then
|
||||||
|
basedir=$wdir
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
# workaround for JBEAP-8937 (on Solaris 10/Sparc)
|
||||||
|
if [ -d "${wdir}" ]; then
|
||||||
|
wdir=`cd "$wdir/.."; pwd`
|
||||||
|
fi
|
||||||
|
# end of workaround
|
||||||
|
done
|
||||||
|
echo "${basedir}"
|
||||||
|
}
|
||||||
|
|
||||||
|
# concatenates all lines of a file
|
||||||
|
concat_lines() {
|
||||||
|
if [ -f "$1" ]; then
|
||||||
|
echo "$(tr -s '\n' ' ' < "$1")"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
BASE_DIR=`find_maven_basedir "$(pwd)"`
|
||||||
|
if [ -z "$BASE_DIR" ]; then
|
||||||
|
exit 1;
|
||||||
|
fi
|
||||||
|
|
||||||
|
##########################################################################################
|
||||||
|
# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
|
||||||
|
# This allows using the maven wrapper in projects that prohibit checking in binary data.
|
||||||
|
##########################################################################################
|
||||||
|
if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then
|
||||||
|
if [ "$MVNW_VERBOSE" = true ]; then
|
||||||
|
echo "Found .mvn/wrapper/maven-wrapper.jar"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
if [ "$MVNW_VERBOSE" = true ]; then
|
||||||
|
echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..."
|
||||||
|
fi
|
||||||
|
if [ -n "$MVNW_REPOURL" ]; then
|
||||||
|
jarUrl="$MVNW_REPOURL/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
|
||||||
|
else
|
||||||
|
jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
|
||||||
|
fi
|
||||||
|
while IFS="=" read key value; do
|
||||||
|
case "$key" in (wrapperUrl) jarUrl="$value"; break ;;
|
||||||
|
esac
|
||||||
|
done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties"
|
||||||
|
if [ "$MVNW_VERBOSE" = true ]; then
|
||||||
|
echo "Downloading from: $jarUrl"
|
||||||
|
fi
|
||||||
|
wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar"
|
||||||
|
if $cygwin; then
|
||||||
|
wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"`
|
||||||
|
fi
|
||||||
|
|
||||||
|
if command -v wget > /dev/null; then
|
||||||
|
if [ "$MVNW_VERBOSE" = true ]; then
|
||||||
|
echo "Found wget ... using wget"
|
||||||
|
fi
|
||||||
|
if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
|
||||||
|
wget "$jarUrl" -O "$wrapperJarPath"
|
||||||
|
else
|
||||||
|
wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath"
|
||||||
|
fi
|
||||||
|
elif command -v curl > /dev/null; then
|
||||||
|
if [ "$MVNW_VERBOSE" = true ]; then
|
||||||
|
echo "Found curl ... using curl"
|
||||||
|
fi
|
||||||
|
if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
|
||||||
|
curl -o "$wrapperJarPath" "$jarUrl" -f
|
||||||
|
else
|
||||||
|
curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f
|
||||||
|
fi
|
||||||
|
|
||||||
|
else
|
||||||
|
if [ "$MVNW_VERBOSE" = true ]; then
|
||||||
|
echo "Falling back to using Java to download"
|
||||||
|
fi
|
||||||
|
javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java"
|
||||||
|
# For Cygwin, switch paths to Windows format before running javac
|
||||||
|
if $cygwin; then
|
||||||
|
javaClass=`cygpath --path --windows "$javaClass"`
|
||||||
|
fi
|
||||||
|
if [ -e "$javaClass" ]; then
|
||||||
|
if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
|
||||||
|
if [ "$MVNW_VERBOSE" = true ]; then
|
||||||
|
echo " - Compiling MavenWrapperDownloader.java ..."
|
||||||
|
fi
|
||||||
|
# Compiling the Java class
|
||||||
|
("$JAVA_HOME/bin/javac" "$javaClass")
|
||||||
|
fi
|
||||||
|
if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
|
||||||
|
# Running the downloader
|
||||||
|
if [ "$MVNW_VERBOSE" = true ]; then
|
||||||
|
echo " - Running MavenWrapperDownloader.java ..."
|
||||||
|
fi
|
||||||
|
("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR")
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
##########################################################################################
|
||||||
|
# End of extension
|
||||||
|
##########################################################################################
|
||||||
|
|
||||||
|
export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}
|
||||||
|
if [ "$MVNW_VERBOSE" = true ]; then
|
||||||
|
echo $MAVEN_PROJECTBASEDIR
|
||||||
|
fi
|
||||||
|
MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
|
||||||
|
|
||||||
|
# For Cygwin, switch paths to Windows format before running java
|
||||||
|
if $cygwin; then
|
||||||
|
[ -n "$M2_HOME" ] &&
|
||||||
|
M2_HOME=`cygpath --path --windows "$M2_HOME"`
|
||||||
|
[ -n "$JAVA_HOME" ] &&
|
||||||
|
JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
|
||||||
|
[ -n "$CLASSPATH" ] &&
|
||||||
|
CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
|
||||||
|
[ -n "$MAVEN_PROJECTBASEDIR" ] &&
|
||||||
|
MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"`
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Provide a "standardized" way to retrieve the CLI args that will
|
||||||
|
# work with both Windows and non-Windows executions.
|
||||||
|
MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@"
|
||||||
|
export MAVEN_CMD_LINE_ARGS
|
||||||
|
|
||||||
|
WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
|
||||||
|
|
||||||
|
exec "$JAVACMD" \
|
||||||
|
$MAVEN_OPTS \
|
||||||
|
-classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
|
||||||
|
"-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
|
||||||
|
${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"
|
|
@ -0,0 +1,182 @@
|
||||||
|
@REM ----------------------------------------------------------------------------
|
||||||
|
@REM Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
@REM or more contributor license agreements. See the NOTICE file
|
||||||
|
@REM distributed with this work for additional information
|
||||||
|
@REM regarding copyright ownership. The ASF licenses this file
|
||||||
|
@REM to you under the Apache License, Version 2.0 (the
|
||||||
|
@REM "License"); you may not use this file except in compliance
|
||||||
|
@REM with the License. You may obtain a copy of the License at
|
||||||
|
@REM
|
||||||
|
@REM https://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
@REM
|
||||||
|
@REM Unless required by applicable law or agreed to in writing,
|
||||||
|
@REM software distributed under the License is distributed on an
|
||||||
|
@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
@REM KIND, either express or implied. See the License for the
|
||||||
|
@REM specific language governing permissions and limitations
|
||||||
|
@REM under the License.
|
||||||
|
@REM ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
@REM ----------------------------------------------------------------------------
|
||||||
|
@REM Maven Start Up Batch script
|
||||||
|
@REM
|
||||||
|
@REM Required ENV vars:
|
||||||
|
@REM JAVA_HOME - location of a JDK home dir
|
||||||
|
@REM
|
||||||
|
@REM Optional ENV vars
|
||||||
|
@REM M2_HOME - location of maven2's installed home dir
|
||||||
|
@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
|
||||||
|
@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending
|
||||||
|
@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
|
||||||
|
@REM e.g. to debug Maven itself, use
|
||||||
|
@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
|
||||||
|
@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
|
||||||
|
@REM ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
|
||||||
|
@echo off
|
||||||
|
@REM set title of command window
|
||||||
|
title %0
|
||||||
|
@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on'
|
||||||
|
@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO%
|
||||||
|
|
||||||
|
@REM set %HOME% to equivalent of $HOME
|
||||||
|
if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
|
||||||
|
|
||||||
|
@REM Execute a user defined script before this one
|
||||||
|
if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
|
||||||
|
@REM check for pre script, once with legacy .bat ending and once with .cmd ending
|
||||||
|
if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat"
|
||||||
|
if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd"
|
||||||
|
:skipRcPre
|
||||||
|
|
||||||
|
@setlocal
|
||||||
|
|
||||||
|
set ERROR_CODE=0
|
||||||
|
|
||||||
|
@REM To isolate internal variables from possible post scripts, we use another setlocal
|
||||||
|
@setlocal
|
||||||
|
|
||||||
|
@REM ==== START VALIDATION ====
|
||||||
|
if not "%JAVA_HOME%" == "" goto OkJHome
|
||||||
|
|
||||||
|
echo.
|
||||||
|
echo Error: JAVA_HOME not found in your environment. >&2
|
||||||
|
echo Please set the JAVA_HOME variable in your environment to match the >&2
|
||||||
|
echo location of your Java installation. >&2
|
||||||
|
echo.
|
||||||
|
goto error
|
||||||
|
|
||||||
|
:OkJHome
|
||||||
|
if exist "%JAVA_HOME%\bin\java.exe" goto init
|
||||||
|
|
||||||
|
echo.
|
||||||
|
echo Error: JAVA_HOME is set to an invalid directory. >&2
|
||||||
|
echo JAVA_HOME = "%JAVA_HOME%" >&2
|
||||||
|
echo Please set the JAVA_HOME variable in your environment to match the >&2
|
||||||
|
echo location of your Java installation. >&2
|
||||||
|
echo.
|
||||||
|
goto error
|
||||||
|
|
||||||
|
@REM ==== END VALIDATION ====
|
||||||
|
|
||||||
|
:init
|
||||||
|
|
||||||
|
@REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
|
||||||
|
@REM Fallback to current working directory if not found.
|
||||||
|
|
||||||
|
set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
|
||||||
|
IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
|
||||||
|
|
||||||
|
set EXEC_DIR=%CD%
|
||||||
|
set WDIR=%EXEC_DIR%
|
||||||
|
:findBaseDir
|
||||||
|
IF EXIST "%WDIR%"\.mvn goto baseDirFound
|
||||||
|
cd ..
|
||||||
|
IF "%WDIR%"=="%CD%" goto baseDirNotFound
|
||||||
|
set WDIR=%CD%
|
||||||
|
goto findBaseDir
|
||||||
|
|
||||||
|
:baseDirFound
|
||||||
|
set MAVEN_PROJECTBASEDIR=%WDIR%
|
||||||
|
cd "%EXEC_DIR%"
|
||||||
|
goto endDetectBaseDir
|
||||||
|
|
||||||
|
:baseDirNotFound
|
||||||
|
set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
|
||||||
|
cd "%EXEC_DIR%"
|
||||||
|
|
||||||
|
:endDetectBaseDir
|
||||||
|
|
||||||
|
IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
|
||||||
|
|
||||||
|
@setlocal EnableExtensions EnableDelayedExpansion
|
||||||
|
for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
|
||||||
|
@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
|
||||||
|
|
||||||
|
:endReadAdditionalConfig
|
||||||
|
|
||||||
|
SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
|
||||||
|
set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar"
|
||||||
|
set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
|
||||||
|
|
||||||
|
set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
|
||||||
|
|
||||||
|
FOR /F "tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO (
|
||||||
|
IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B
|
||||||
|
)
|
||||||
|
|
||||||
|
@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
|
||||||
|
@REM This allows using the maven wrapper in projects that prohibit checking in binary data.
|
||||||
|
if exist %WRAPPER_JAR% (
|
||||||
|
if "%MVNW_VERBOSE%" == "true" (
|
||||||
|
echo Found %WRAPPER_JAR%
|
||||||
|
)
|
||||||
|
) else (
|
||||||
|
if not "%MVNW_REPOURL%" == "" (
|
||||||
|
SET DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
|
||||||
|
)
|
||||||
|
if "%MVNW_VERBOSE%" == "true" (
|
||||||
|
echo Couldn't find %WRAPPER_JAR%, downloading it ...
|
||||||
|
echo Downloading from: %DOWNLOAD_URL%
|
||||||
|
)
|
||||||
|
|
||||||
|
powershell -Command "&{"^
|
||||||
|
"$webclient = new-object System.Net.WebClient;"^
|
||||||
|
"if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^
|
||||||
|
"$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^
|
||||||
|
"}"^
|
||||||
|
"[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^
|
||||||
|
"}"
|
||||||
|
if "%MVNW_VERBOSE%" == "true" (
|
||||||
|
echo Finished downloading %WRAPPER_JAR%
|
||||||
|
)
|
||||||
|
)
|
||||||
|
@REM End of extension
|
||||||
|
|
||||||
|
@REM Provide a "standardized" way to retrieve the CLI args that will
|
||||||
|
@REM work with both Windows and non-Windows executions.
|
||||||
|
set MAVEN_CMD_LINE_ARGS=%*
|
||||||
|
|
||||||
|
%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*
|
||||||
|
if ERRORLEVEL 1 goto error
|
||||||
|
goto end
|
||||||
|
|
||||||
|
:error
|
||||||
|
set ERROR_CODE=1
|
||||||
|
|
||||||
|
:end
|
||||||
|
@endlocal & set ERROR_CODE=%ERROR_CODE%
|
||||||
|
|
||||||
|
if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost
|
||||||
|
@REM check for post script, once with legacy .bat ending and once with .cmd ending
|
||||||
|
if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat"
|
||||||
|
if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd"
|
||||||
|
:skipRcPost
|
||||||
|
|
||||||
|
@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
|
||||||
|
if "%MAVEN_BATCH_PAUSE%" == "on" pause
|
||||||
|
|
||||||
|
if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE%
|
||||||
|
|
||||||
|
exit /B %ERROR_CODE%
|
|
@ -0,0 +1,54 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<parent>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-parent</artifactId>
|
||||||
|
<version>2.3.1.RELEASE</version>
|
||||||
|
<relativePath/> <!-- lookup parent from repository -->
|
||||||
|
</parent>
|
||||||
|
<groupId>com.baeldung.docker</groupId>
|
||||||
|
<artifactId>spring-boot-docker</artifactId>
|
||||||
|
<version>0.0.1-SNAPSHOT</version>
|
||||||
|
<name>spring-boot-docker</name>
|
||||||
|
<description>Demo project showing Spring Boot and Docker</description>
|
||||||
|
|
||||||
|
<properties>
|
||||||
|
<java.version>8</java.version>
|
||||||
|
</properties>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-web</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-test</artifactId>
|
||||||
|
<scope>test</scope>
|
||||||
|
<exclusions>
|
||||||
|
<exclusion>
|
||||||
|
<groupId>org.junit.vintage</groupId>
|
||||||
|
<artifactId>junit-vintage-engine</artifactId>
|
||||||
|
</exclusion>
|
||||||
|
</exclusions>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||||
|
<configuration>
|
||||||
|
<layers>
|
||||||
|
<enabled>true</enabled>
|
||||||
|
</layers>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
|
||||||
|
</project>
|
|
@ -0,0 +1,15 @@
|
||||||
|
# To build, run the following command from the top level project directory:
|
||||||
|
#
|
||||||
|
# docker build -f src/main/docker/Dockerfile .
|
||||||
|
|
||||||
|
FROM adoptopenjdk:11-jre-hotspot as builder
|
||||||
|
ARG JAR_FILE=target/*.jar
|
||||||
|
COPY ${JAR_FILE} application.jar
|
||||||
|
RUN java -Djarmode=layertools -jar application.jar extract
|
||||||
|
|
||||||
|
FROM adoptopenjdk:11-jre-hotspot
|
||||||
|
COPY --from=builder dependencies/ ./
|
||||||
|
COPY --from=builder snapshot-dependencies/ ./
|
||||||
|
COPY --from=builder spring-boot-loader/ ./
|
||||||
|
COPY --from=builder application/ ./
|
||||||
|
ENTRYPOINT ["java", "org.springframework.boot.loader.JarLauncher"]
|
|
@ -0,0 +1,13 @@
|
||||||
|
package com.baeldung.docker;
|
||||||
|
|
||||||
|
import org.springframework.boot.SpringApplication;
|
||||||
|
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||||
|
|
||||||
|
@SpringBootApplication
|
||||||
|
public class DemoApplication {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
SpringApplication.run(DemoApplication.class, args);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,16 @@
|
||||||
|
package com.baeldung.docker;
|
||||||
|
|
||||||
|
import org.springframework.http.ResponseEntity;
|
||||||
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
@RestController
|
||||||
|
public class HelloController {
|
||||||
|
|
||||||
|
@GetMapping("/hello")
|
||||||
|
public ResponseEntity<String> hello()
|
||||||
|
{
|
||||||
|
return ResponseEntity.ok("hello2 ");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1 @@
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
### Relevant Articles:
|
### Relevant Articles:
|
||||||
|
|
||||||
- [Run a Java main Method Using Gradle](https://www.baeldung.com/gradle-run-java-main)
|
- [Run a Java main Method Using Gradle](https://www.baeldung.com/gradle-run-java-main)
|
||||||
|
- [Finding Unused Gradle Dependencies](https://www.baeldung.com/gradle-finding-unused-dependencies)
|
||||||
|
|
|
@ -1,7 +0,0 @@
|
||||||
## Guava
|
|
||||||
|
|
||||||
This module contains articles a Google Guava
|
|
||||||
|
|
||||||
### Relevant Articles:
|
|
||||||
- [Introduction to Guava Throwables](https://www.baeldung.com/guava-throwables)
|
|
||||||
- [Guava CharMatcher](https://www.baeldung.com/guava-string-charmatcher)
|
|
|
@ -1,8 +1,5 @@
|
||||||
=========
|
## Guava 18
|
||||||
|
|
||||||
## Guava and Hamcrest Cookbooks and Examples
|
|
||||||
|
|
||||||
|
|
||||||
### Relevant Articles:
|
### Relevant Articles:
|
||||||
- [Guava Functional Cookbook](http://www.baeldung.com/guava-functions-predicates)
|
|
||||||
- [Guava 18: What’s New?](http://www.baeldung.com/whats-new-in-guava-18)
|
- [Guava 18: What’s New?](http://www.baeldung.com/whats-new-in-guava-18)
|
||||||
|
|
|
@ -1,5 +1,3 @@
|
||||||
=========
|
|
||||||
|
|
||||||
## Guava 19
|
## Guava 19
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
|
## Guava 21
|
||||||
|
|
||||||
### Relevant articles:
|
### Relevant articles:
|
||||||
|
|
||||||
- [New Stream, Comparator and Collector in Guava 21](http://www.baeldung.com/guava-21-new)
|
- [New Stream, Comparator and Collector in Guava 21](http://www.baeldung.com/guava-21-new)
|
||||||
- [New in Guava 21 common.util.concurrent](http://www.baeldung.com/guava-21-util-concurrent)
|
- [New in Guava 21 common.util.concurrent](http://www.baeldung.com/guava-21-util-concurrent)
|
||||||
- [Zipping Collections in Java](http://www.baeldung.com/java-collections-zip)
|
|
||||||
|
|
|
@ -13,17 +13,8 @@
|
||||||
<relativePath>../</relativePath>
|
<relativePath>../</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<dependencies>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.jooq</groupId>
|
|
||||||
<artifactId>jool</artifactId>
|
|
||||||
<version>${jool.version}</version>
|
|
||||||
</dependency>
|
|
||||||
</dependencies>
|
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<guava.version>21.0</guava.version>
|
<guava.version>21.0</guava.version>
|
||||||
<jool.version>0.9.12</jool.version>
|
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
</project>
|
</project>
|
|
@ -0,0 +1,8 @@
|
||||||
|
## Guava Collections List examples
|
||||||
|
|
||||||
|
This module contains articles about list collections in Guava
|
||||||
|
|
||||||
|
### Relevant Articles:
|
||||||
|
|
||||||
|
- [Partition a List in Java](https://www.baeldung.com/java-list-split)
|
||||||
|
- [Guava – Lists](https://www.baeldung.com/guava-lists)
|
|
@ -4,15 +4,15 @@
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<artifactId>guava-collections</artifactId>
|
<artifactId>guava-collections-list</artifactId>
|
||||||
<version>0.1.0-SNAPSHOT</version>
|
<version>0.1.0-SNAPSHOT</version>
|
||||||
<name>guava-collections</name>
|
<name>guava-collections-list</name>
|
||||||
|
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>com.baeldung</groupId>
|
<groupId>com.baeldung</groupId>
|
||||||
<artifactId>parent-java</artifactId>
|
<artifactId>guava-modules</artifactId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>0.0.1-SNAPSHOT</version>
|
||||||
<relativePath>../parent-java</relativePath>
|
<relativePath>../</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
|
@ -9,9 +9,9 @@
|
||||||
|
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>com.baeldung</groupId>
|
<groupId>com.baeldung</groupId>
|
||||||
<artifactId>parent-java</artifactId>
|
<artifactId>guava-modules</artifactId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>0.0.1-SNAPSHOT</version>
|
||||||
<relativePath>../parent-java</relativePath>
|
<relativePath>../</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
|
@ -8,9 +8,9 @@
|
||||||
|
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>com.baeldung</groupId>
|
<groupId>com.baeldung</groupId>
|
||||||
<artifactId>parent-java</artifactId>
|
<artifactId>guava-modules</artifactId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>0.0.1-SNAPSHOT</version>
|
||||||
<relativePath>../parent-java</relativePath>
|
<relativePath>../</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
|
@ -8,9 +8,8 @@ This module contains articles about Google Guava collections
|
||||||
- [Guava Ordering Cookbook](https://www.baeldung.com/guava-order)
|
- [Guava Ordering Cookbook](https://www.baeldung.com/guava-order)
|
||||||
- [Guide to Guava’s Ordering](https://www.baeldung.com/guava-ordering)
|
- [Guide to Guava’s Ordering](https://www.baeldung.com/guava-ordering)
|
||||||
- [Hamcrest Collections Cookbook](https://www.baeldung.com/hamcrest-collections-arrays)
|
- [Hamcrest Collections Cookbook](https://www.baeldung.com/hamcrest-collections-arrays)
|
||||||
- [Partition a List in Java](https://www.baeldung.com/java-list-split)
|
|
||||||
- [Filtering and Transforming Collections in Guava](https://www.baeldung.com/guava-filter-and-transform-a-collection)
|
- [Filtering and Transforming Collections in Guava](https://www.baeldung.com/guava-filter-and-transform-a-collection)
|
||||||
- [Guava – Join and Split Collections](https://www.baeldung.com/guava-joiner-and-splitter-tutorial)
|
- [Guava – Join and Split Collections](https://www.baeldung.com/guava-joiner-and-splitter-tutorial)
|
||||||
- [Guava – Lists](https://www.baeldung.com/guava-lists)
|
|
||||||
- [Guide to Guava MinMaxPriorityQueue and EvictingQueue](https://www.baeldung.com/guava-minmax-priority-queue-and-evicting-queue)
|
- [Guide to Guava MinMaxPriorityQueue and EvictingQueue](https://www.baeldung.com/guava-minmax-priority-queue-and-evicting-queue)
|
||||||
- [Guide to Guava Table](https://www.baeldung.com/guava-table)
|
- [Guide to Guava Table](https://www.baeldung.com/guava-table)
|
||||||
|
- [Zipping Collections in Java](http://www.baeldung.com/java-collections-zip)
|
|
@ -0,0 +1,95 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project
|
||||||
|
xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<artifactId>guava-collections</artifactId>
|
||||||
|
<version>0.1.0-SNAPSHOT</version>
|
||||||
|
<name>guava-collections</name>
|
||||||
|
|
||||||
|
<parent>
|
||||||
|
<groupId>com.baeldung</groupId>
|
||||||
|
<artifactId>guava-modules</artifactId>
|
||||||
|
<version>0.0.1-SNAPSHOT</version>
|
||||||
|
<relativePath>../</relativePath>
|
||||||
|
</parent>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<!-- utils -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.commons</groupId>
|
||||||
|
<artifactId>commons-collections4</artifactId>
|
||||||
|
<version>${commons-collections4.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.commons</groupId>
|
||||||
|
<artifactId>commons-lang3</artifactId>
|
||||||
|
<version>${commons-lang3.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.jooq</groupId>
|
||||||
|
<artifactId>jool</artifactId>
|
||||||
|
<version>${jool.version}</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- test scoped -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.junit.jupiter</groupId>
|
||||||
|
<artifactId>junit-jupiter</artifactId>
|
||||||
|
<version>${junit-jupiter.version}</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.junit.vintage</groupId>
|
||||||
|
<artifactId>junit-vintage-engine</artifactId>
|
||||||
|
<version>${junit-jupiter.version}</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.assertj</groupId>
|
||||||
|
<artifactId>assertj-core</artifactId>
|
||||||
|
<version>${assertj.version}</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- https://mvnrepository.com/artifact/org.hamcrest/java-hamcrest -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.hamcrest</groupId>
|
||||||
|
<artifactId>java-hamcrest</artifactId>
|
||||||
|
<version>${java-hamcrest.version}</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<finalName>guava-collections</finalName>
|
||||||
|
|
||||||
|
<resources>
|
||||||
|
<resource>
|
||||||
|
<directory>src/main/resources</directory>
|
||||||
|
<filtering>true</filtering>
|
||||||
|
</resource>
|
||||||
|
</resources>
|
||||||
|
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-surefire-plugin</artifactId>
|
||||||
|
<version>2.22.2</version>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
|
||||||
|
<properties>
|
||||||
|
<!-- util -->
|
||||||
|
<commons-collections4.version>4.1</commons-collections4.version>
|
||||||
|
<jool.version>0.9.12</jool.version>
|
||||||
|
|
||||||
|
<!-- testing -->
|
||||||
|
<assertj.version>3.6.1</assertj.version>
|
||||||
|
<java-hamcrest.version>2.0.0.0</java-hamcrest.version>
|
||||||
|
<junit-jupiter.version>5.6.2</junit-jupiter.version>
|
||||||
|
</properties>
|
||||||
|
|
||||||
|
</project>
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue