8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

在 Eclipse 构建路径中使用用户库时出现 ClassNotFoundException

baash05 3月前

90 0

我使用的是 Eclipse 3.7 (STS),IDE 中运行着 Tomcat 7。我创建了一个新的动态 Web 项目,并将单个 JSP 文件添加到 Web 内容根文件夹中。我可以运行 Tomcat 并访问...

我使用的是 Eclipse 3.7 (STS),IDE 中运行着 Tomcat 7。我创建了一个新的动态 Web 项目,并将一个 JSP 文件添加到 Web 内容根文件夹中。我可以毫无问题地在 Eclipse 中运行 Tomcat 并访问 JSP。

我从用户库向项目添加了一些第三方 JAR(我没有使用 maven 或自动依赖管理)。在 JSP 中,我引用了项目 JAR 文件中的类,我可以毫无问题地编译它,但是当我在 Tomcat 上部署时,JSP 抛出了 ClassNotFoundException。显然,Tomcat 无法从我的库设置中找到 JAR。我尝试为 Tomcat 服务器创建 Run As 配置,并将类路径设置为与项目的类路径设置相匹配,但仍然遇到相同的 classnotfound 问题。

我可以通过手动将所有项目 JAR 复制到 WEB-INF/lib 目录来解决这个问题,这样 webapp 就可以找到所有依赖项,但这很荒谬,而且我也不指望这是解决方案,因为这是一个维护噩梦。

我是否遗漏了什么?

帖子版权声明 1、本帖标题:在 Eclipse 构建路径中使用用户库时出现 ClassNotFoundException
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由baash05在本站《eclipse》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 在项目属性中,转到 Deployment Assembly 。在那里添加你手动添加为用户库的 buildpath 条目。它最终会出现在 /WEB-INF/lib 部署的 WAR 中。

    enter image description here

    也可以看看:

    • 如何将 JAR 库添加到 WAR 项目而不遇到 java.lang.ClassNotFoundException?Classpath vs Build Path vs /WEB-INF/lib
  • 救命恩人!这招管用,我知道一定有一个简单的方法,天啊,现在我可以睡一觉了,万分感谢!

  • 如果您使用的是旧版 eclipse,在 3.4.2 版本中,项目属性中的选项名称是“Java EE 模块依赖项”

  • @bizmark:没错。另请参阅 stackoverflow.com/questions/3511479/…

  • Aldo 3月前 0 只看Ta
    引用 6

    每个动态项目教程中都应该包含此信息

  • @BalusC-请查看我的问题 stackoverflow.com/questions/18249117/…

  • 您需要将 jar 文件复制到 WEB-INF/lib 文件夹:这就是它们应该所在的位置。

    Eclipse 应该为您提供生成包含所有依赖项的 WAR 文件的选项:我已经很长时间没有使用 Web Tools 了,但无论如何,所有依赖项都必须位于 WEB-INF/lib 中,否则类加载器将无法找到它们。

  • 我在 Eclipse STS 中找不到动态 Web 项目的任何 WAR 设置,但我确切地知道您在说什么,因为这是我使用 Eclipse Galileo 多年后所期望的。

  • Kiwi 3月前 0 只看Ta
    引用 10

    你的朋友是这里的编码初学者,我需要你的帮助来满足我的要求。实际上,我正在创建自己的库存管理系统,并且只是坚持创建一个条件......

    你的朋友是这里的编码初学者,

    我需要你的帮助来满足我的要求。

    实际上,我正在创建自己的库存管理系统,并且只是在我的 php 页面中创建一个条件来发布我从供应商处收到的需求。

    我已经制作了 html 表单来填写产品及其项目,这些项目基于我的结构化数据库“sql”,包括收到的数量,

    当我按下产品选择时,产品会显示产品表内的数据库,并且工作正常,但在项目选择中,选择选项会显示所有项目,而我只想通过引用所选产品来条件化项目的选择,

    知道数据库中的表已通过外键关联,其中项目与产品表中的产品相关。

    他们告诉我,我应该使用 ajax 来创建其产品所显示的选择项,但是作为初学者,我确实没有得到这样做的认可。

    现在我将给你我的代码来协助你

    mysql 预测数据库

    first table : CREATE TABLE `stock_products` (
     `idstkproduct` int(11) NOT NULL,
     `idstksec` int(11) DEFAULT NULL,
     `product_name` varchar(45) DEFAULT NULL,
     `description` varchar(205) DEFAULT NULL,
     `created_at` datetime DEFAULT current_timestamp()
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
    
    
    Example odf the inserted data inside the first table :
    
     INSERT INTO `stock_products` (`idstkproduct`, `idstksec`, `product_name`, `description`, `created_at`) VALUES
    (1, 2, 'super_star', 'non', '2024-01-26 17:45:24'),
    (2, 1, 'darling', NULL, '2024-01-26 17:46:53'),
    (4, 1, 'ruch', NULL, '2024-01-26 17:49:00'),
    (5, 1, 'anita', NULL, '2024-01-26 17:49:00'),
    (6, 1, 'x_tasy', NULL, '2024-01-26 17:49:00'),
    (7, 1, 'africa_queen', NULL, '2024-01-26 17:49:00'),
    (8, 3, 'elegance', NULL, '2024-01-26 17:52:06'),
    (9, 3, 'magic-k', NULL, '2024-01-26 17:56:20'),
    (10, 3, 'leila', NULL, '2024-01-26 17:56:20');  
    
    -----------------------------------------------------------------------------
     second table: CREATE TABLE `stock_designation` (
     `idstkdesign` int(11) NOT NULL,
     `idstkproduct` int(11) DEFAULT NULL,
     `designation` varchar(45) DEFAULT NULL,
     `description` varchar(205) DEFAULT NULL,
     `created_at` datetime DEFAULT current_timestamp()
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; 
    
    Example for the inserted data inside the 2nd table :
     INSERT INTO `stock_designation` (`idstkdesign`, `idstkproduct`, `designation`, `description`, `created_at`) VALUES
    (1, 1, '1', 'noire couleur', '2024-01-26 18:18:03'),
    (2, 1, 'white', 'white couleur', '2024-01-26 18:34:15'),
    (3, 1, '950', 'couleur violet', '2024-01-26 18:34:15'),
    (35, 2, '1', NULL, '2024-01-29 13:21:50'),
    (36, 2, 'bleu', NULL, '2024-01-29 13:21:50'),
    (37, 2, '613', NULL, '2024-01-29 13:21:50'),
    (38, 2, '27', NULL, '2024-01-29 13:21:50'),
    (39, 2, '350', NULL, '2024-01-29 13:21:50'),
    (40, 2, '144', NULL, '2024-01-29 13:21:50'),
    (51, 4, '1', NULL, '2024-01-29 13:39:31'),
    (52, 4, '900', NULL, '2024-01-29 13:39:31'),
    (53, 4, '33', NULL, '2024-01-29 13:39:31'),
    (54, 4, '39', NULL, '2024-01-29 13:39:31'),
    (55, 4, '27', NULL, '2024-01-29 13:39:31'),
    (56, 4, '950', NULL, '2024-01-29 13:39:31'),
    (75, 5, '1', NULL, '2024-01-29 13:46:59'),
    (76, 5, '144', NULL, '2024-01-29 13:46:59'),
    (77, 5, '33', NULL, '2024-01-29 13:46:59'),
    (78, 5, 'night', NULL, '2024-01-29 13:46:59');
    
    
    Now the relation code between the two tables : 
    
    and now the relation between these two tables : ALTER TABLE `stock_designation`
      ADD PRIMARY KEY (`idstkdesign`),
      ADD KEY `fk_stock_designation_stock_products` (`idstkproduct`);
    

    供应商.php

    <?php session_start(); ?>
    
    <?php
    if (!isset($_SESSION['user'])) header('location: login.php');
    $_SESSION['table'] = 'stock_products';
    $_SESSION['redirect_to'] = 'product-add.php';
    $user = $_SESSION['user'];
    ?>
    
    <!DOCTYPE html>
    <html>
    <head>
        <title>Add Product - Inventory Management System</title>
        <?php include('partials/app-header-script.php');?>
    </head>
    <body>
      <div id="dashboardMainContainer">
        <?php include('partials/app-sidebar.php')?>
        <?php include('./database/connection.php'); ?>
    
        <div class="dashboard_content_container" id="dashboard_content_container">
          <?php include('partials/app-topnav.php')?>
          <div class="dashboard_content">
            <div class="dashboard_content_main">
              <div class="row">
                <div class="column column-12">
                  <h1 class="sectionheader"><i class="fa fa-plus"></i> Create Arrived Marchandises</h1>
                  <div id="useraddformcontainer">
                   
    <form method="post" action="purchase_script.php" onsubmit="return validateForm()">
      <h2>Purchase Transaction</h2>
      <table>
        <thead>
          <tr>
            <th>Product</th>
            <th>Product Item</th>
            <th>Quantity Recieved</th>
          </tr>
        </thead>
        <tbody id="product_items">
          <tr id="row1">
            <td>
              <select name="product_id[]" id="product_id_1" required onchange="fetchDesignations(1)">
                <option value="">Select Product</option>
                <?php
                          // Retrieve products from the database (already in your code)
                          $sql = "SELECT idstkproduct, product_name FROM stock_products ORDER BY product_name ASC";
                          $stmt = $conn->prepare($sql);
                          $stmt->execute();
                          $products = $stmt->fetchAll(PDO::FETCH_ASSOC);
    
                          // Populate the dropdown with product options
                          foreach ($products as $product) {
                            echo '<option value="' . $product['idstkproduct'] . '">' . $product['product_name'] . '</option>';
                          }
                          ?>
              </select>
            </td>
            <td>
              <select name="designation_id[]" id="designation_id_1" required>
                <option value="">Select Item</option>
                   <?php
                          // Retrieve department names from the database (Code added here)
                          $sql = "SELECT idstkdesign, designation FROM stock_designation ORDER BY designation ASC";
                          $stmt = $conn->prepare($sql);
                          $stmt->execute();
                          $designations = $stmt->fetchAll(PDO::FETCH_ASSOC);
    
                          // Populate the dropdown with Product options
                          foreach ($designations as $designation) {
                          echo '<option value="' . $designation['idstkdesign'] . '">' . $designation['designation'] . '</option>';
                          }
                          ?>
              </select>
            </td>
            <td><input type="number" name="quantity[]" id="quantity_1" min="1" required></td>
          </tr>
        </tbody>
        <tfoot>
          <tr>
            <td colspan="2">
              <button type="button" onclick="addRow()">Add Another Product Item</button>
            </td>
          </tr>
        </tfoot>
      </table>
      <button type="submit">Record entry</button>
    </form>
    
                    <?php if(isset($_SESSION['response'])) {
                      $response_message = $_SESSION['response']['message'];
                      $is_success = $_SESSION['response']['success'];
                      ?>
                      <div class="responsemessage">
                        <p class="responsemessage <?= $is_success ? 'responsemessage__success' : 'responsemessage__error'?>">
                          <?= $response_message ?>
                        </p>
                      </div>
                    <?php unset($_SESSION['response']); }?>
                  </div>
                </div>
              </div>
            </div>
          </div>
        </div>
        <?php include('partials/app-scripts.php');?>
    
    </body>
    </html>
    

    指定.js

    function fetchDesignations(productId) {
      // Use AJAX to send a request to fetch_designations.php
      $.ajax({
        url: "database/fetch_designations.php", // Ensure correct path
        method: "POST",
        data: { product_id: productId },
        success: function(response) {
          // Update the designation dropdown based on the response
          $("#designation_id_1").empty(); // Clear existing options
          $.each(response, function(index, designation) {
            $("#designation_id_1").append($("<option></option>").val(designation.id).text(designation.name));
          });
        } // Closing curly brace for the success function
      }); // Closing curly brace for the $.ajax call
    } // Closing curly brace for the fetchDesignations function
    
    fetch_designation.php
    
    <?php
    // Connect to the database (include your connection details)
    // **Ensure the path to connection.php is accurate:**
    require_once './database/connection.php'; // Adjust path if needed
    
    // Check for database connection errors:
    if (!$conn) {
        error_log("Database connection failed: " . mysqli_connect_error());
        die("Database connection error"); // Or handle the error gracefully
    }
    
    if (isset($_POST['product_id'])) {
        $product_id = $_POST['product_id'];
    
        // Prepare and execute the query to fetch designations for the product
        $sql = "SELECT idstkdesign, designation FROM stock_designation WHERE idstkproduct = ?";
        $stmt = $conn->prepare($sql);
        $stmt->execute([$product_id]);
    
        // Fetch results as associative array
        $designations = $stmt->fetchAll(PDO::FETCH_ASSOC);
    
        // **Debugging:** Check the fetched data before encoding:
        print_r($designations); // Or use var_dump($designations);
    
        // Encode the designations as JSON and send as response
        header('Content-Type: application/json'); // Set content type for JSON
        echo json_encode($designations);
    }
    ?>
    

    商品选择仍然显示所有商品(不受我选择的产品限制),我很沮丧,

    我需要您的建议,关于我应该做什么、修改什么或其他什么才能实现我想要的目标

  • $sql = \'SELECT idstkdesign, designation FROM stock_designation WHERE idstkproduct = \'+$product_id;

  • 引用 12

    总是会传递 \'1\' 作为参数,看到了吗?

  • 所以我试图修复我的 ajax 函数,它不能像以前一样正常工作。我想使用我的选择选项值来仅显示所选值的 ajax 结果。当前的一个不起作用(

    所以我试图修复我的 ajax 函数,它不能像以前一样正常工作。我想使用我的选择选项值来仅显示所选值的 ajax 结果。当前选项不起作用(可以选择所选选项,但 ajax 不会根据所选值进行更改,只会更改所选选项上的第一个值)

    这是我的 ajax 函数

        public function ajax($data){
            if($data == "all"){
                $isi['data'] = $this->home_model->SelDokter();
                echo "<table class='table table-hover'>";
                $sp = "ajksdas";
                foreach($isi['data'] as $cetak){
                    if($sp != $cetak['spe'] && $cetak['spe'] == "DU"){
                        echo "<thead><tr class='info'><td colspan='7' align='center'><strong>" . $cetak['spe'] . </tr>;
                        echo "<tr class='success'>";
                        echo "<td align='center'><strong>Nama Dokter</strong></td>";
                        echo "<td align='center'><strong>Senin</strong></td>";
                        echo "<td align='center'><strong>Selasa</strong></td>";
                        echo "<td align='center'><strong>Rabu</strong></td>";
                        echo "<td align='center'><strong>Kamis</strong></td>";
                        echo "<td align='center'><strong>Jumat</strong></td>";
                        echo "<td align='center'><strong>Sabtu</strong></td>";
                        echo "</tr>";
                        echo "</thead>";
                        echo "<tbody>";
                    }elseif($sp != $cetak['spe'] && $cetak['spe'] == "AG"){
                        echo "<thead><tr class='info'><td colspan='7' align='center'><strong>" . $cetak['spe'] </tr>;
                        echo "<tr class='success'>";
                        echo "<td align='center'><strong>Nama Dokter</strong></td>";
                        echo "<td align='center'><strong>Senin</strong></td>";
                        echo "<td align='center'><strong>Selasa</strong></td>";
                        echo "<td align='center'><strong>Rabu</strong></td>";
                        echo "<td align='center'><strong>Kamis</strong></td>";
                        echo "<td align='center'><strong>Jumat</strong></td>";
                        echo "<td align='center'><strong>Sabtu</strong></td>";
                        echo "</tr>";
                        echo "</thead>";
                        echo "<tbody>";
                    }elseif($sp != $cetak['spe']){
                        echo "<thead><tr class='info'><td colspan='7' align='center'><strong>" . $cetak['spe'] . "<strong></td></tr>";
                        echo "<tr class='success'>";
                        echo "<td align='center'><strong>Nama Dokter</strong></td>";
                        echo "<td align='center'><strong>Senin</strong></td>";
                        echo "<td align='center'><strong>Selasa</strong></td>";
                        echo "<td align='center'><strong>Rabu</strong></td>";
                        echo "<td align='center'><strong>Kamis</strong></td>";
                        echo "<td align='center'><strong>Jumat</strong></td>";
                        echo "<td align='center'><strong>Sabtu</strong></td>";
                        echo "</tr>";
                        echo "</thead>";
                        echo "<tbody>";
                    }
                    echo "<tr class='warning'>";
                    echo "<td><a style='color: #1B6B20;' href='" . base_url() . "home/dokter/" . $cetak['id_dktr'] . "'>" . $cetak['nama'] . "</a></td>";
                    echo "<td align='center'>" . $cetak['senin'] . "</td>";
                    echo "<td align='center'>" . $cetak['selasa'] . "</td>";
                    echo "<td align='center'>" . $cetak['rabu'] . "</td>";
                    echo "<td align='center'>" . $cetak['kamis'] . "</td>";
                    echo "<td align='center'>" . $cetak['jumat'] . "</td>";
                    echo "<td align='center'>" . $cetak['sabtu'] . "</td>";
                    echo "</tr>";
                    $sp = $cetak['spe'];
                }
                echo "</tbody>";
                echo "</table>";
            }else{
                $spe = str_replace('%20', ' ', $data);
                $isi['data'] = $this->home_model->SelectDokter($spe);
                echo "<table class='table table-hover'>";
                $sp = "ajksdas";
                foreach($isi['data'] as $cetak){
                    if($sp != $cetak['spe'] && $cetak['spe'] == "DU"){
                        echo "<thead><tr class='info'><td colspan='7' align='center'><strong>" . $cetak['spe'] . "<strong><br></tr>";
                        echo "<tr class='success'>";
                        echo "<td align='center'><strong>Nama Dokter</strong></td>";
                        echo "<td align='center'><strong>Senin</strong></td>";
                        echo "<td align='center'><strong>Selasa</strong></td>";
                        echo "<td align='center'><strong>Rabu</strong></td>";
                        echo "<td align='center'><strong>Kamis</strong></td>";
                        echo "<td align='center'><strong>Jumat</strong></td>";
                        echo "<td align='center'><strong>Sabtu</strong></td>";
                        echo "</tr>";
                        echo "</thead>";
                        echo "<tbody>";
                    }elseif($sp != $cetak['spe'] && $cetak['spe'] == "AG"){
                        echo "<thead><tr class='info'><td colspan='7' align='center'><strong>" . $cetak['spe'] . "<tr>";
                        echo "<tr class='success'>";
                        echo "<td align='center'><strong>Nama Dokter</strong></td>";
                        echo "<td align='center'><strong>Senin</strong></td>";
                        echo "<td align='center'><strong>Selasa</strong></td>";
                        echo "<td align='center'><strong>Rabu</strong></td>";
                        echo "<td align='center'><strong>Kamis</strong></td>";
                        echo "<td align='center'><strong>Jumat</strong></td>";
                        echo "<td align='center'><strong>Sabtu</strong></td>";
                        echo "</tr>";
                        echo "</thead>";
                        echo "<tbody>";
                    }elseif($sp != $cetak['spe']){
                        echo "<thead><tr class='info'><td colspan='7' align='center'><strong>" . $cetak['spe'] . "<strong></td></tr>";
                        echo "<tr class='success'>";
                        echo "<td align='center'><strong>Nama Dokter</strong></td>";
                        echo "<td align='center'><strong>Senin</strong></td>";
                        echo "<td align='center'><strong>Selasa</strong></td>";
                        echo "<td align='center'><strong>Rabu</strong></td>";
                        echo "<td align='center'><strong>Kamis</strong></td>";
                        echo "<td align='center'><strong>Jumat</strong></td>";
                        echo "<td align='center'><strong>Sabtu</strong></td>";
                        echo "</tr>";
                        echo "</thead>";
                        echo "<tbody>";
                    }
                    echo "<tr class='warning'>";
                    echo "<td><a style='color: #1B6B20;' href='" . base_url() . "home/dokter/" . $cetak['id_dktr'] . "'>" . $cetak['nama'] . "</a></td>";
                    echo "<td align='center'>" . $cetak['senin'] . "</td>";
                    echo "<td align='center'>" . $cetak['selasa'] . "</td>";
                    echo "<td align='center'>" . $cetak['rabu'] . "</td>";
                    echo "<td align='center'>" . $cetak['kamis'] . "</td>";
                    echo "<td align='center'>" . $cetak['jumat'] . "</td>";
                    echo "<td align='center'>" . $cetak['sabtu'] . "</td>";
                    echo "</tr>";
                    $sp = $cetak['spe'];
                }
                echo "</tbody>";
                echo "</table>";
            }
        }
    

    这是我的选择选项,使用当前选定的选项值调用 ajax 函数 <select class="col-lg-4 col-md-4 col-sm-4 col-xs-4 form-control-static" type="text" name="spesialis" id="search" onChange="pilih(this.value)">

    非常希望得到任何帮助。

    我尝试过更改 ajax.js 重定向,但仍然不起作用。我不知道还有什么其他方法真的有效

  • symfony:我想通过在同一页面 display.html.twig 中打开模式来更新 conseil,因此添加 conseil 可以正常工作(添加和更新具有相同的形式),但是当我

    symfony:我想通过在同一页面 display.html.twig 中打开模态框来更新顾问,因此添加顾问可以正常工作(添加和更新具有相同的形式),但是当我想更新打开的模态框但里面有一个整个页面时,我尝试使用 AJAX。

    你能检查一下我的代码并告诉我解决方案是什么吗?谢谢!

    $(document).ready(function(){
        $(".update_btn").click(function(event){
            event.preventDefault();
            var ModalURL = $(this).attr('href'); 
            console.log("ModalURL: ", ModalURL);         $.ajax({
                url: ModalURL,
                type: "GET",
                success: function(data) {
                    console.log("AJAX Response Data: ", data); 
                    $("#myModal .modal-body").html(data); 
                    $("#myModal").modal("show"); 
                },
                error: function(xhr, status, error) {
                    console.error("AJAX Error: ", error); 
                } 
            });
        });
    });
    

    这是

    大多数人都知道,Java 9 中引入了 Java 模块(平台模块系统)。不过,从那以后,我个人再也没有机会明确使用模块。与此同时,从来没有……

    大多数人都知道, Java 9 中引入了 。尽管我个人从那时起就没有机会明确使用模块。同时,我看到的每个与 Java 相关的教程也没有明确使用它。我的意思是,我从未见过人们真正使用 module-info.java 文件,好像这个特性完全没有使用过。尽管看起来它是在“幕后”使用的。一些或我自己的 Maven 项目在 Java 构建路径下列出了“模块依赖项”,但有些没有。它们都是 Spring Boot 项目。这是怎么回事?如果我没有明确使用 module-info.java 并且没有说类似的话 requires java.sql; ?谢谢。

    PS:该问题源于 Eclipse IDE 的一个问题,突然间它无法解析 java.sql.* 导入,并且大多数合乎逻辑的解决方案会说 requires java.sql; ,虽然它在\'模块依赖项\'下列出,所以它会以某种方式自动链接...所以我想了解幕后发生了什么。

    PPS:我尝试在 Stack Overflow 上搜索可能的答案,但没有找到(主要是与 Maven 模块相关的问题/答案)。

  • mysl 3月前 0 只看Ta
    引用 16

    据我所知,Maven 并不关心

  • vee 3月前 0 只看Ta
    引用 17

    在 JPMS 中,模块依赖关系会像 Maven 一样提前解析。与 OSGi 不同,无法在运行时添加/删除模块。因此,在某些情况下 JPMS 是有意义的(例如,使用

  • 谢谢大家。很高兴知道 java.sql 模块是“模块化运行时映像”的一部分。我在哪里可以阅读更多相关信息?再次,我想了解为什么有时 Eclipse 会给出无法解析该模块的错误,即使我的代码是非模块化的。我记得通过从 Eclipse 嵌入式 JDK 17 切换到独立 JDK 21 来解决这个问题,但我不知道为什么会发生这种情况,所以很想了解。谢谢。

  • ti7 3月前 0 只看Ta
    引用 19

    可能让您感到困惑的是重载术语“模块”。在引入 Java 平台模块系统 (JPMS) 之前,Maven 使用术语“模块”。Maven 模块最常作为 多模块项目 ,允许您对多个编译单元进行分组并在部分中表达它们之间的依赖关系 <dependencies> ,而不必将它们安装到本地 Maven 存储库以使编译成功。

    如果您有一个非模块化项目(没有 module-info.java ),您的所有类都位于 类路径 或未 命名模块 ,并且 Maven 还会将所有依赖项(及其依赖项等)列在 <dependencies> 的部分 pom.xml ,无论您是否在代码中实际使用它们。类路径上的类可以读取所有其他类,即使它们位于未导出的包中(根据 module-info.class .

    有一个例外:自 Java 17 起,JDK 模块始终被视为位于模块路径中,因此您无法从类路径访问其内部包,至少除非您在命令行上使用 --add-exp或ts or --add-opens 。这是最后的手段,鼓励依赖 JDK 内部组件的库不再使用它们。

    如果你通过添加 来使项目模块化 module-info.class ,那么 Maven 现在会将依赖项放在 模块路径 。JPMS 模块不能依赖于类路径,因此 每个 依赖项,即使它没有指定 module-info.class ,也没有 Automatic-Module-Name ,也必须位于模块路径上,并且是你的 module-info.java .

  • Slaw 3月前 0 只看Ta
    引用 20

    谢谢。我理解 Maven 模块和 Java 模块之间的区别。但我的问题更多的是,如果我的应用程序没有 module-info.java 文件,Maven/Eclipse 究竟如何处理所有依赖项的模块?你在这里提到了一点,但仍然不清楚……我在哪里可以阅读有关所有规则的更多详细信息?如果我不使用模块,但我的依赖项使用模块怎么办?什么是模块路径?“视为它们在模块路径上”究竟是什么意思?如果我没有明确指定,Eclipse 如何知道“需要”哪些模块?谢谢。

返回
作者最近主题: