Various code tweaks, action updates, dep updates
diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md
index 6e0c44c..5c93208 100644
--- a/.github/CONTRIBUTING.md
+++ b/.github/CONTRIBUTING.md
@@ -19,8 +19,8 @@
 
 ### Bug Reports
 
-Bug reports must have enough detail to understand and reproduce the problem. 
-Bug reports without an associated pull request will generally be closed. 
+Bug reports must have enough detail to understand and reproduce the problem.
+Bug reports without an associated pull request will generally be closed.
 However, bug reports with a pull request are likely to be merged promptly.
 
 ## FAQ
@@ -28,14 +28,14 @@
 Please search previous issues for an answer before opening a pull request. A few common ones
 are listed here.
 
-### I get a compilation error.
+### I get a compilation error
 
-While you can check the build status on Github to confirm, 
-the project correctly builds and passes tests at all times. 
-90% of the time it's due to using an old version of Java. Version 3.4+ require Java 8. 
+While you can check the build status on Github to confirm,
+the project correctly builds and passes tests at all times.
+90% of the time it's due to using an old version of Java. Version 3.4+ require Java 8.
 Use earlier versions with Java 7 and earlier.
 
-### This barcode doesn't decode.
+### This barcode doesn't decode
 
 Not all images will decode. All else equal, more is better, but this is not accepted as a bug
 report. A pull request that makes changes to make the barcode decode without decreasing the net
diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml
index d3f4e25..19cec63 100644
--- a/.github/workflows/codeql-analysis.yml
+++ b/.github/workflows/codeql-analysis.yml
@@ -36,11 +36,11 @@
 
     steps:
     - name: Checkout repository
-      uses: actions/checkout@v2
+      uses: actions/checkout@v3
 
     # Initializes the CodeQL tools for scanning.
     - name: Initialize CodeQL
-      uses: github/codeql-action/init@v1
+      uses: github/codeql-action/init@v2
       with:
         languages: ${{ matrix.language }}
         # If you wish to specify custom queries, you can do so here or in a config file.
@@ -51,7 +51,7 @@
     # Autobuild attempts to build any compiled languages  (C/C++, C#, or Java).
     # If this step fails, then you should remove it and run the build manually (see below)
     - name: Autobuild
-      uses: github/codeql-action/autobuild@v1
+      uses: github/codeql-action/autobuild@v2
 
     # ℹī¸ Command-line programs to run using the OS shell.
     # 📚 https://git.io/JvXDl
@@ -65,4 +65,4 @@
     #   make release
 
     - name: Perform CodeQL Analysis
-      uses: github/codeql-action/analyze@v1
+      uses: github/codeql-action/analyze@v2
diff --git a/.github/workflows/test_java_17.yml b/.github/workflows/test_java_17.yml
index eb7841d..aef0305 100644
--- a/.github/workflows/test_java_17.yml
+++ b/.github/workflows/test_java_17.yml
@@ -12,7 +12,7 @@
     runs-on: ubuntu-latest
 
     steps:
-    - uses: actions/checkout@v2
+    - uses: actions/checkout@v3
     - name: Set up JDK 17
       uses: actions/setup-java@v2
       with:
diff --git a/.github/workflows/test_java_8_android.yml b/.github/workflows/test_java_8_android.yml
index 677093c..16cfd07 100644
--- a/.github/workflows/test_java_8_android.yml
+++ b/.github/workflows/test_java_8_android.yml
@@ -15,7 +15,7 @@
     runs-on: ubuntu-latest
 
     steps:
-    - uses: actions/checkout@v2
+    - uses: actions/checkout@v3
     - name: Set up Android SDK
       run: if [ ! -d /tmp/android-sdk-linux/platforms ]; then curl -s https://storage.googleapis.com/zxing-build/android-sdk-linux.tar.bz2 | bunzip2 | tar xf - -C /tmp; else ls -l /tmp/android-sdk-linux; fi
     - name: Set up JDK 8
diff --git a/README.md b/README.md
index aac37f8..cacfbfe 100644
--- a/README.md
+++ b/README.md
@@ -70,7 +70,6 @@
 | [pyzxing](https://github.com/ChenjieXu/pyzxing)                                           | Python wrapper to ZXing library
 | [zxing-dart](https://github.com/shirne/zxing-dart)                                        | Port to dart
 
-
 ### Other related third-party open source projects
 
 | Module                                         | Description
@@ -82,10 +81,10 @@
 
 ## Links
 
-* [Online Decoder](https://zxing.org/w/decode.jspx)
-* [QR Code Generator](https://zxing.appspot.com/generator)
-* [Javadoc](https://zxing.github.io/zxing/apidocs/)
-* [Documentation Site](https://zxing.github.io/zxing/)
+  * [Online Decoder](https://zxing.org/w/decode.jspx)
+  * [QR Code Generator](https://zxing.appspot.com/generator)
+  * [Javadoc](https://zxing.github.io/zxing/apidocs/)
+  * [Documentation Site](https://zxing.github.io/zxing/)
 
 ## Contacting
 
@@ -94,9 +93,8 @@
 
 ## Etcetera
 
-[![Coverity Status](https://scan.coverity.com/projects/1924/badge.svg)](https://scan.coverity.com/projects/1924)
-[![codecov.io](https://codecov.io/github/zxing/zxing/coverage.svg?branch=master)](https://codecov.io/github/zxing/zxing?branch=master)
-[![Codacy Badge](https://api.codacy.com/project/badge/Grade/7270e4b57c50483699448bf32721ab10)](https://www.codacy.com/app/srowen/zxing?utm_source=github.com&utm_medium=referral&utm_content=zxing/zxing&utm_campaign=Badge_Grade)
+[![codecov](https://codecov.io/gh/zxing/zxing/branch/master/graph/badge.svg?token=6RrJHvUMDl)](https://codecov.io/gh/zxing/zxing)
+[![Codacy](https://app.codacy.com/project/badge/Grade/5d1186edeb714f0187e3eb18cc6aeef1)](https://www.codacy.com/gh/zxing/zxing/dashboard?utm_source=github.com&utm_medium=referral&utm_content=zxing/zxing&utm_campaign=Badge_Grade)
 
 QR code is trademarked by Denso Wave, inc. Thanks to Haase & Martin OHG for contributing the logo.
 
diff --git a/core/src/main/java/com/google/zxing/common/MinimalECIInput.java b/core/src/main/java/com/google/zxing/common/MinimalECIInput.java
index 5955c0b..0f287b6 100755
--- a/core/src/main/java/com/google/zxing/common/MinimalECIInput.java
+++ b/core/src/main/java/com/google/zxing/common/MinimalECIInput.java
@@ -188,7 +188,7 @@
   *
   * @param   index the index of the {@code int} value to be returned
   *
-  * @return  the specified {@code int} ECI value. 
+  * @return  the specified {@code int} ECI value.
   *          The ECI specified the encoding of all bytes with a higher index until the
   *          next ECI or until the end of the input if no other ECI follows.
   *
@@ -236,11 +236,11 @@
     }
   }
 
-  static void addEdges(String stringToEncode, 
-                       ECIEncoderSet encoderSet, 
-                       InputEdge[][] edges, 
-                       int from, 
-                       InputEdge previous, 
+  static void addEdges(String stringToEncode,
+                       ECIEncoderSet encoderSet,
+                       InputEdge[][] edges,
+                       int from,
+                       InputEdge previous,
                        int fnc1) {
 
     char ch = stringToEncode.charAt(from);
@@ -290,7 +290,7 @@
       }
     }
     if (minimalJ < 0) {
-      throw new RuntimeException("Internal error: failed to encode \"" + stringToEncode + "\"");
+      throw new IllegalStateException("Failed to encode \"" + stringToEncode + "\"");
     }
     List<Integer> intsAL = new ArrayList<>();
     InputEdge current = edges[inputLength][minimalJ];
diff --git a/core/src/main/java/com/google/zxing/common/StringUtils.java b/core/src/main/java/com/google/zxing/common/StringUtils.java
index c1c04d8..b749d83 100644
--- a/core/src/main/java/com/google/zxing/common/StringUtils.java
+++ b/core/src/main/java/com/google/zxing/common/StringUtils.java
@@ -64,11 +64,13 @@
    */
   public static String guessEncoding(byte[] bytes, Map<DecodeHintType,?> hints) {
     Charset c = guessCharset(bytes, hints);
-    if (c == SHIFT_JIS_CHARSET) {
+    if (c.equals(SHIFT_JIS_CHARSET)) {
       return "SJIS";
-    } else if (c == StandardCharsets.UTF_8) {
+    }
+    if (c.equals(StandardCharsets.UTF_8)) {
       return "UTF8";
-    } else if (c == StandardCharsets.ISO_8859_1) {
+    }
+    if (c.equals(StandardCharsets.ISO_8859_1)) {
       return "ISO8859_1";
     }
     return c.name();
diff --git a/core/src/main/java/com/google/zxing/datamatrix/encoder/MinimalEncoder.java b/core/src/main/java/com/google/zxing/datamatrix/encoder/MinimalEncoder.java
index 4d3dd8d..edac497 100755
--- a/core/src/main/java/com/google/zxing/datamatrix/encoder/MinimalEncoder.java
+++ b/core/src/main/java/com/google/zxing/datamatrix/encoder/MinimalEncoder.java
@@ -30,7 +30,7 @@
  *
  * Uses Dijkstra to produce mathematically minimal encodings that are in some cases smaller than the results produced
  * by the algorithm described in annex S in the specification ISO/IEC 16022:200(E). The biggest improvment of this
- * algorithm over that one is the case when the algorithm enters the most inefficient mode, the B256 mode. The 
+ * algorithm over that one is the case when the algorithm enters the most inefficient mode, the B256 mode. The
  * algorithm from the specification algorithm will exit this mode only if it encounters digits so that arbitrarily
  * inefficient results can be produced if the postfix contains no digits.
  *
@@ -45,7 +45,7 @@
  * contains many * characters from ISO-8859-2 (Latin 2) and few from ISO-8859-3 (Latin 3)).
  * In a second stage this stream of ECIs and bytes is minimally encoded using the various Data Matrix encoding modes.
  * While both stages encode mathematically minimally it is not ensured that the result is mathematically minimal since
- * the size growth for inserting an ECI in the first stage can only be approximated as the first stage does not know 
+ * the size growth for inserting an ECI in the first stage can only be approximated as the first stage does not know
  * in which mode the ECI will occur in the second stage (may, or may not require an extra latch to ASCII depending on
  * the current mode). The reason for this shortcoming are difficulties in implementing it in a straightforward and
  * readable manner.
@@ -165,7 +165,7 @@
    *  The number of characters encoded is returned in characterLength.
    *  The number of characters encoded is also minimal in the sense that the algorithm stops as soon
    *  as a character encoding fills a C40 word competely (three C40 values). An exception is at the
-   *  end of the string where two C40 values are allowed (according to the spec the third c40 value 
+   *  end of the string where two C40 values are allowed (according to the spec the third c40 value
    *  is filled  with 0 (Shift 1) in this case).
    */
   static int getNumberOfC40Words(Input input, int from, boolean c40,int[] characterLength) {
@@ -217,7 +217,7 @@
         // one ASCII encoded character or an extended character via Upper Shift
         addEdge(edges, new Edge(input, Mode.ASCII, from, 1, previous));
       }
-  
+
       Mode[] modes = {Mode.C40, Mode.TEXT};
       for (Mode mode : modes) {
         int[] characterLength = new int[1];
@@ -225,7 +225,7 @@
           addEdge(edges, new Edge(input, mode, from, characterLength[0], previous));
         }
       }
-  
+
       if (input.haveNCharacters(from,3) &&
           HighLevelEncoder.isNativeX12(input.charAt(from)) &&
           HighLevelEncoder.isNativeX12(input.charAt(from + 1)) &&
@@ -260,16 +260,16 @@
      * Likewise the end vertices are located after the last character at position input.length().
      * For any position there might be up to six vertices, one for each of the encoding types ASCII, C40, TEXT, X12,
      * EDF and B256.
-     * 
+     *
      * As an example consider the input string "ABC123" then at position 0 there is only one vertex with the default
      * ASCII encodation. At position 3 there might be vertices for the types ASCII, C40, X12, EDF and B256.
      *
      * An edge leading to such a vertex encodes one or more of the characters left of the position that the vertex
      * represents. It encodes the characters in the encoding mode of the vertex that it ends on. In other words,
-     * all edges leading to a particular vertex encode the same characters (the length of the suffix can vary) using the same 
+     * all edges leading to a particular vertex encode the same characters (the length of the suffix can vary) using the same
      * encoding mode.
      * As an example consider the input string "ABC123" and the vertex (4,EDF). Possible edges leading to this vertex
-     * are: 
+     * are:
      *   (0,ASCII)  --EDF(ABC1)--> (4,EDF)
      *   (1,ASCII)  --EDF(BC1)-->  (4,EDF)
      *   (1,B256)   --EDF(BC1)-->  (4,EDF)
@@ -389,11 +389,11 @@
      * (0,ASCII) B256(A) (3) --> (1,B256) B256(B) (3) --> (2,B256) EDF(CDE) (6) --> (5,EDF)
      * (0,ASCII) B256(A) (3) --> (1,B256) B256(B) (3) --> (2,B256) EDF(CDEF) (6) --> (6,EDF)
      *
-     * Edge "(2,ASCII) ASCII(C) (3) --> (3,ASCII)" is minimal for the vertex (3,ASCII) so that edges "(2,EDF) ASCII(C) (5) --> (3,ASCII)" 
+     * Edge "(2,ASCII) ASCII(C) (3) --> (3,ASCII)" is minimal for the vertex (3,ASCII) so that edges "(2,EDF) ASCII(C) (5) --> (3,ASCII)"
      * and "(2,B256) ASCII(C) (4) --> (3,ASCII)" can be removed.
-     * Edge "(0,ASCII) EDF(ABC) (4) --> (3,EDF)" is minimal for the vertex (3,EDF) so that edges "(1,ASCII) EDF(BC) (5) --> (3,EDF)" 
+     * Edge "(0,ASCII) EDF(ABC) (4) --> (3,EDF)" is minimal for the vertex (3,EDF) so that edges "(1,ASCII) EDF(BC) (5) --> (3,EDF)"
      * and "(1,B256) EDF(BC) (6) --> (3,EDF)" can be removed.
-     * Edge "(2,B256) B256(C) (4) --> (3,B256)" is minimal for the vertex (3,B256) so that edges "(2,ASCII) B256(C) (5) --> (3,B256)" 
+     * Edge "(2,B256) B256(C) (4) --> (3,B256)" is minimal for the vertex (3,B256) so that edges "(2,ASCII) B256(C) (5) --> (3,B256)"
      * and "(2,EDF) B256(C) (6) --> (3,B256)" can be removed.
      *
      * This continues for vertices 3 thru 7
@@ -472,7 +472,7 @@
     }
 
     if (minimalJ < 0) {
-      throw new RuntimeException("Internal error: failed to encode \"" + input + "\"");
+      throw new IllegalStateException("Failed to encode \"" + input + "\"");
     }
     return new Result(edges[inputLength][minimalJ]);
   }
@@ -512,7 +512,7 @@
       * C40 -> ASCII: word(c1,c2,c3), 254
       * TEXT -> ASCII: word(c1,c2,c3), 254
       * X12 -> ASCII: word(c1,c2,c3), 254
-      * EDIFACT -> ASCII: Unlatch character,0,0,0 or c1,Unlatch character,0,0 or c1,c2,Unlatch character,0 or 
+      * EDIFACT -> ASCII: Unlatch character,0,0,0 or c1,Unlatch character,0,0 or c1,c2,Unlatch character,0 or
       * c1,c2,c3,Unlatch character
       * B256 -> ASCII: without latch after n bytes
       */
@@ -616,7 +616,7 @@
 
         // see 5.2.5.2 C40 encodation rules and 5.2.7.2 ANSI X12 encodation rules
         if (fromPosition + characterLength >= input.length() && getCodewordsRemaining(cachedTotalSize) == 0) {
-          return Mode.ASCII; 
+          return Mode.ASCII;
         }
         int lastASCII = getLastASCII();
         if (lastASCII == 1 && getCodewordsRemaining(cachedTotalSize + 1) == 0) {
@@ -631,7 +631,7 @@
     }
 
     /** Peeks ahead and returns 1 if the postfix consists of exactly two digits, 2 if the postfix consists of exactly
-     *  two consecutive digits and a non extended character or of 4 digits. 
+     *  two consecutive digits and a non extended character or of 4 digits.
      *  Returns 0 in any other case
      **/
     int getLastASCII() {
@@ -970,7 +970,7 @@
       } else if (input.getMacroId() == 6) {
         size += prepend(MinimalEncoder.Edge.getBytes(237), bytesAL);
       }
-   
+
       if (input.getFNC1Character() > 0) {
         size += prepend(MinimalEncoder.Edge.getBytes(232), bytesAL);
       }
diff --git a/core/src/main/java/com/google/zxing/oned/Code128Writer.java b/core/src/main/java/com/google/zxing/oned/Code128Writer.java
index 27628ed..fe13696 100644
--- a/core/src/main/java/com/google/zxing/oned/Code128Writer.java
+++ b/core/src/main/java/com/google/zxing/oned/Code128Writer.java
@@ -362,7 +362,7 @@
     return CODE_CODE_B;
   }
 
-  /** 
+  /**
    * Encodes minimally using Divide-And-Conquer with Memoization
    **/
   private static final class MinimalEncoder {
@@ -435,8 +435,8 @@
               patternIndex = CODE_FNC_3;
               break;
             case ESCAPE_FNC_4:
-              if ((charset == Charset.A && latch != Latch.SHIFT) ||
-                  (charset == Charset.B && latch == Latch.SHIFT)) {
+              if (charset == Charset.A && latch != Latch.SHIFT ||
+                  charset == Charset.B && latch == Latch.SHIFT) {
                 patternIndex = CODE_FNC_4_A;
               } else {
                 patternIndex = CODE_FNC_4_B;
@@ -445,11 +445,10 @@
             default:
               patternIndex = contents.charAt(i) - ' ';
           }
-          if ((charset == Charset.A && latch != Latch.SHIFT) ||
-              (charset == Charset.B && latch == Latch.SHIFT)) {
-            if (patternIndex < 0) {
-              patternIndex += '`';
-            }
+          if ((charset == Charset.A && latch != Latch.SHIFT ||
+               charset == Charset.B && latch == Latch.SHIFT) &&
+               patternIndex < 0) {
+            patternIndex += '`';
           }
           addPattern(patterns, patternIndex, checkSum, checkWeight, i);
         }
@@ -505,11 +504,11 @@
       if (mCost > 0) {
         return mCost;
       }
-        
+
       int minCost = Integer.MAX_VALUE;
       Latch minLatch = Latch.NONE;
       boolean atEnd = position + 1 >= contents.length();
-      
+
       Charset[] sets = new Charset[] { Charset.A, Charset.B };
       for (int i = 0; i <= 1; i++) {
         if (canEncode(contents, sets[i], position)) {
diff --git a/core/src/main/java/com/google/zxing/pdf417/decoder/PDF417ScanningDecoder.java b/core/src/main/java/com/google/zxing/pdf417/decoder/PDF417ScanningDecoder.java
index 9248193..50ad6b4 100644
--- a/core/src/main/java/com/google/zxing/pdf417/decoder/PDF417ScanningDecoder.java
+++ b/core/src/main/java/com/google/zxing/pdf417/decoder/PDF417ScanningDecoder.java
@@ -244,11 +244,11 @@
         throw NotFoundException.getNotFoundInstance();
       }
       barcodeMatrix01.setValue(calculatedNumberOfCodewords);
-    } else if (numberOfCodewords[0] != calculatedNumberOfCodewords) {
-      if (calculatedNumberOfCodewords >= 1 && calculatedNumberOfCodewords <= PDF417Common.MAX_CODEWORDS_IN_BARCODE) {
-        // The calculated one is more reliable as it is derived from the row indicator columns
-        barcodeMatrix01.setValue(calculatedNumberOfCodewords);
-      }
+    } else if (numberOfCodewords[0] != calculatedNumberOfCodewords &&
+        calculatedNumberOfCodewords >= 1 &&
+        calculatedNumberOfCodewords <= PDF417Common.MAX_CODEWORDS_IN_BARCODE) {
+      // The calculated one is more reliable as it is derived from the row indicator columns
+      barcodeMatrix01.setValue(calculatedNumberOfCodewords);
     }
   }
 
diff --git a/core/src/main/java/com/google/zxing/pdf417/encoder/PDF417HighLevelEncoder.java b/core/src/main/java/com/google/zxing/pdf417/encoder/PDF417HighLevelEncoder.java
index 282cc73..564d7c9 100644
--- a/core/src/main/java/com/google/zxing/pdf417/encoder/PDF417HighLevelEncoder.java
+++ b/core/src/main/java/com/google/zxing/pdf417/encoder/PDF417HighLevelEncoder.java
@@ -168,7 +168,7 @@
    *   then charsets will be chosen so that the byte representation is minimal.
    * @return the encoded message (the char values range from 0 to 928)
    */
-  static String encodeHighLevel(String msg, Compaction compaction, Charset encoding, boolean autoECI) 
+  static String encodeHighLevel(String msg, Compaction compaction, Charset encoding, boolean autoECI)
       throws WriterException {
 
     if (msg.isEmpty()) {
@@ -370,12 +370,12 @@
                 tmp.append((char) 27); //ll
                 continue;
               } else {
-                if (startpos + idx + 1 < count) {
-                  if (!input.isECI(startpos + idx + 1) && isPunctuation(input.charAt(startpos + idx + 1))) {
-                    submode = SUBMODE_PUNCTUATION;
-                    tmp.append((char) 25); //pl
-                    continue;
-                  }
+                if (startpos + idx + 1 < count &&
+                    !input.isECI(startpos + idx + 1) &&
+                    isPunctuation(input.charAt(startpos + idx + 1))) {
+                  submode = SUBMODE_PUNCTUATION;
+                  tmp.append((char) 25); //pl
+                  continue;
                 }
                 tmp.append((char) 29); //ps
                 tmp.append((char) PUNCTUATION[ch]);
@@ -441,7 +441,7 @@
       while (localEnd < end && !input.isECI(localEnd)) {
         localEnd++;
       }
-      
+
       final int localCount = localEnd - localStart;
       if (localCount <= 0) {
         //done
diff --git a/core/src/test/java/com/google/zxing/common/BitMatrixTestCase.java b/core/src/test/java/com/google/zxing/common/BitMatrixTestCase.java
index b92705e..49cd48e 100644
--- a/core/src/test/java/com/google/zxing/common/BitMatrixTestCase.java
+++ b/core/src/test/java/com/google/zxing/common/BitMatrixTestCase.java
@@ -235,7 +235,6 @@
     fullMatrix.setRegion(0, 0, 3, 3);
     BitMatrix centerMatrix = new BitMatrix(3, 3);
     centerMatrix.setRegion(1, 1, 1, 1);
-    BitMatrix emptyMatrix24 = new BitMatrix(2, 4);
 
     boolean[][] matrix = new boolean[3][3];
     assertEquals(emptyMatrix, BitMatrix.parse(matrix));
diff --git a/pom.xml b/pom.xml
index d0a933e..3b7ccf6 100644
--- a/pom.xml
+++ b/pom.xml
@@ -165,7 +165,7 @@
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-javadoc-plugin</artifactId>
-          <version>3.4.0</version>
+          <version>3.4.1</version>
           <configuration>
             <source>${java.version}</source>
             <quiet>true</quiet>
@@ -204,22 +204,22 @@
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-install-plugin</artifactId>
-          <version>3.0.0-M1</version>
+          <version>3.0.1</version>
         </plugin>
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-resources-plugin</artifactId>
-          <version>3.2.0</version>
+          <version>3.3.0</version>
         </plugin>
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-jar-plugin</artifactId>
-          <version>3.2.2</version>
+          <version>3.3.0</version>
         </plugin>
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-assembly-plugin</artifactId>
-          <version>3.4.0</version>
+          <version>3.4.2</version>
         </plugin>
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
@@ -262,12 +262,12 @@
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-scm-plugin</artifactId>
-          <version>2.0.0-M1</version>
+          <version>2.0.0-M2</version>
         </plugin>
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-deploy-plugin</artifactId>
-          <version>3.0.0-M2</version>
+          <version>3.0.0</version>
         </plugin>
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
@@ -277,7 +277,7 @@
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-project-info-reports-plugin</artifactId>
-          <version>3.3.0</version>
+          <version>3.4.1</version>
         </plugin>
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
@@ -385,7 +385,7 @@
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-site-plugin</artifactId>
-          <version>4.0.0-M2</version>
+          <version>4.0.0-M3</version>
           <inherited>false</inherited>
         </plugin>
         <plugin>
@@ -396,7 +396,7 @@
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-checkstyle-plugin</artifactId>
-          <version>3.1.2</version>
+          <version>3.2.0</version>
           <configuration>
             <configLocation>src/checkstyle/checkstyle.xml</configLocation>
             <includeTestSourceDirectory>true</includeTestSourceDirectory>
@@ -421,7 +421,7 @@
         <plugin>
           <groupId>org.apache.rat</groupId>
           <artifactId>apache-rat-plugin</artifactId>
-          <version>0.14</version>
+          <version>0.15</version>
           <configuration>
             <consoleOutput>true</consoleOutput>
             <ignoreErrors>true</ignoreErrors>
diff --git a/zxingorg/pom.xml b/zxingorg/pom.xml
index 72cdf45..18a117d 100644
--- a/zxingorg/pom.xml
+++ b/zxingorg/pom.xml
@@ -73,7 +73,7 @@
   </parent>
 
   <properties>
-    <spring.version>5.3.21</spring.version>
+    <spring.version>5.3.23</spring.version>
   </properties>
 
   <build>