diff --git a/pom.xml b/pom.xml
index 1a469ea..dc6a5a2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -117,11 +117,11 @@
     <wagonVersion>2.4</wagonVersion>
     <aetherVersion>1.0.0.v20140518</aetherVersion>
     <!-- https://cwiki.apache.org/confluence/x/VIHOCg#MavenEcosystemCleanup-ResolverandMaven -->
-    <plexus-java.version>1.1.0</plexus-java.version>
-    <jetty.version>9.4.43.v20210629</jetty.version>
+    <plexus-java.version>1.1.2</plexus-java.version>
+    <jetty.version>9.4.50.v20221201</jetty.version>
     <!-- for ITs -->
     <sitePluginVersion>3.12.1</sitePluginVersion>
-    <projectInfoReportsPluginVersion>3.2.2</projectInfoReportsPluginVersion>
+    <projectInfoReportsPluginVersion>3.4.2</projectInfoReportsPluginVersion>
     <project.build.outputTimestamp>2022-08-10T19:51:10Z</project.build.outputTimestamp>
     <slf4jVersion>1.7.36</slf4jVersion>
   </properties>
@@ -219,12 +219,12 @@
     <dependency>
       <groupId>org.apache.maven.shared</groupId>
       <artifactId>maven-invoker</artifactId>
-      <version>3.1.0</version>
+      <version>3.2.0</version>
     </dependency>
     <dependency>
       <groupId>org.apache.maven.shared</groupId>
       <artifactId>maven-common-artifact-filters</artifactId>
-      <version>3.1.1</version>
+      <version>3.2.0</version>
     </dependency>
 
     <!-- Doxia -->
@@ -262,18 +262,18 @@
     <dependency>
       <groupId>org.apache.httpcomponents</groupId>
       <artifactId>httpclient</artifactId>
-      <version>4.5.13</version>
+      <version>4.5.14</version>
     </dependency>
     <dependency>
       <groupId>org.apache.httpcomponents</groupId>
       <artifactId>httpcore</artifactId>
-      <version>4.4.15</version>
+      <version>4.4.16</version>
     </dependency>
 
     <dependency>
       <groupId>com.thoughtworks.qdox</groupId>
       <artifactId>qdox</artifactId>
-      <version>2.0.1</version>
+      <version>2.0.3</version>
     </dependency>
 
     <!-- Plexus -->
@@ -285,7 +285,7 @@
     <dependency>
       <groupId>org.codehaus.plexus</groupId>
       <artifactId>plexus-utils</artifactId>
-      <version>3.4.2</version>
+      <version>3.5.0</version>
     </dependency>
     <dependency>
       <groupId>commons-io</groupId>
@@ -371,7 +371,7 @@
     <dependency>
       <groupId>org.assertj</groupId>
       <artifactId>assertj-core</artifactId>
-      <version>3.23.1</version>
+      <version>3.24.2</version>
       <scope>test</scope>
     </dependency>
     <dependency>
@@ -409,22 +409,12 @@
         </plugin>
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-jxr-plugin</artifactId>
-          <version>3.1.1</version>
-        </plugin>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-javadoc-plugin</artifactId>
           <version>${project.version}</version>
           <configuration>
             <failOnWarnings>false</failOnWarnings>
           </configuration>
         </plugin>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-project-info-reports-plugin</artifactId>
-          <version>3.1.2</version>
-        </plugin>
       </plugins>
     </pluginManagement>
     <plugins>
@@ -504,7 +494,7 @@
           <plugin>
             <groupId>org.codehaus.mojo</groupId>
             <artifactId>mrm-maven-plugin</artifactId>
-            <version>1.2.0</version>
+            <version>1.5.0</version>
             <executions>
               <execution>
                 <id>repository</id>
diff --git a/src/main/java/org/apache/maven/plugins/javadoc/JavadocUtil.java b/src/main/java/org/apache/maven/plugins/javadoc/JavadocUtil.java
index bcad646..99369b6 100644
--- a/src/main/java/org/apache/maven/plugins/javadoc/JavadocUtil.java
+++ b/src/main/java/org/apache/maven/plugins/javadoc/JavadocUtil.java
@@ -1006,27 +1006,17 @@
 
     /**
      * @param log a logger could be null
-     * @return the Maven home defined in the <code>maven.home</code> system property or defined in <code>M2_HOME</code>
-     *         system env variables or null if never set.
+     * @return the Maven home defined in the <code>maven.home</code> system property
+     *         or null if never set.
      * @since 2.6
      */
     private static String getMavenHome(Log log) {
         String mavenHome = System.getProperty("maven.home");
-        if (mavenHome == null) {
-            try {
-                mavenHome = CommandLineUtils.getSystemEnvVars().getProperty("M2_HOME");
-            } catch (IOException e) {
-                if (log != null && log.isDebugEnabled()) {
-                    log.debug("IOException: " + e.getMessage());
-                }
-            }
-        }
 
         File m2Home = new File(mavenHome);
         if (!m2Home.exists()) {
             if (log != null && log.isErrorEnabled()) {
-                log.error("Cannot find Maven application directory. Either specify 'maven.home' system property, or "
-                        + "M2_HOME environment variable.");
+                log.error("Cannot find Maven application directory. Either specify 'maven.home' system property.");
             }
         }
 
@@ -1039,16 +1029,7 @@
      * @since 2.6
      */
     private static String getMavenOpts(Log log) {
-        String mavenOpts = null;
-        try {
-            mavenOpts = CommandLineUtils.getSystemEnvVars().getProperty("MAVEN_OPTS");
-        } catch (IOException e) {
-            if (log != null && log.isDebugEnabled()) {
-                log.debug("IOException: " + e.getMessage());
-            }
-        }
-
-        return mavenOpts;
+        return CommandLineUtils.getSystemEnvVars().getProperty("MAVEN_OPTS");
     }
 
     /**
@@ -1061,14 +1042,7 @@
     private static File getJavaHome(Log log) {
         File javaHome = null;
 
-        String javaHomeValue = null;
-        try {
-            javaHomeValue = CommandLineUtils.getSystemEnvVars().getProperty("JAVA_HOME");
-        } catch (IOException e) {
-            if (log != null && log.isDebugEnabled()) {
-                log.debug("IOException: " + e.getMessage());
-            }
-        }
+        String javaHomeValue = CommandLineUtils.getSystemEnvVars().getProperty("JAVA_HOME");
 
         // if maven.home is set, we can assume JAVA_HOME must be used for testing
         if (System.getProperty("maven.home") == null || javaHomeValue == null) {
@@ -1100,16 +1074,7 @@
      * @since 2.6
      */
     private static String getJavaOpts(Log log) {
-        String javaOpts = null;
-        try {
-            javaOpts = CommandLineUtils.getSystemEnvVars().getProperty("JAVA_OPTS");
-        } catch (IOException e) {
-            if (log != null && log.isDebugEnabled()) {
-                log.debug("IOException: " + e.getMessage());
-            }
-        }
-
-        return javaOpts;
+        return CommandLineUtils.getSystemEnvVars().getProperty("JAVA_OPTS");
     }
 
     /**
