Các lớp Java Intellij IDEA không tự động biên dịch khi lưu


182

Hôm qua tôi đã chuyển sang IntelliJ IDEA từ Eclipse.

Tôi cũng đang sử dụng JRebel với WebSphere Server 7.

Bây giờ mọi thứ dường như đang hoạt động tốt, ngoại trừ khi tôi sửa đổi tệp Java và nhấn lưu , IntelliJ không biên dịch lại tệp, để JRebel chọn nó.

Tính năng " Xây dựng tự động " của Eclipse đã giải quyết vấn đề này.

Trong IntelliJ IDEA, tôi phải nhấn CTRL+ SHIFT+ 9để biên dịch lại lớp có liên quan cho JRebel để chọn nó. Nếu các thay đổi được thực hiện trên hai tệp , tôi phải thực hiện điều này trên từng tệp và vì IntelliJ sử dụng cơ chế lưu tất cả, thật khó để biết phải biên dịch lại thủ công mà tôi không thực sự quan tâm.

Không có cách nào để khiến IntelliJ tự làm điều này sao?


11
Tại sao bạn không nhấn Ctrl+ F9? Điều đó sẽ xây dựng toàn bộ dự án và nếu chỉ có hai tệp đã thay đổi thì chúng sẽ được xây dựng lại.
maba

2
Tôi sợ nó sẽ xây dựng lại tất cả. Tôi tin rằng mặc định là đầu ra rõ ràng khi xây dựng lại ... vì vậy thông thường, điều này không hoạt động tốt ...
mmm

5
không làm sạch trước khi xây dựng. Đó là một bản dựng gia tăng. Bạn có một sự lựa chọn khác để xây dựng lại nếu muốn.
maba

Câu trả lời:


250

CẬP NHẬT

Đối với các bản phát hành IntelliJ IDEA 12+, chúng tôi có thể tự động xây dựng các nguồn đã chỉnh sửa nếu chúng tôi đang sử dụng tùy chọn trình biên dịch bên ngoài. Điều duy nhất cần thiết là kiểm tra tùy chọn " Xây dựng dự án tự động ", nằm trong cài đặt " Trình biên dịch ":

Cài đặt trình biên dịch

Ngoài ra, nếu bạn muốn triển khai nóng, trong khi ứng dụng đang chạy hoặc nếu bạn đang sử dụng devtools khởi động mùa xuân, bạn cũng nên kích hoạt compiler.automake.allow.when.app.runningđăng ký từ. Điều này sẽ tự động biên dịch các thay đổi của bạn.

Sử dụng loại Ctrl+ Shift+ A(hoặc + Shift+ Atrên Mac) Registrykhi cửa sổ đăng ký được mở, định vị và bật compiler.automake.allow.when.app.running, xem tại đây:

nhập mô tả hình ảnh ở đây


Đối với các phiên bản cũ hơn 12, bạn có thể sử dụng plugin EclipseMode để IDEA tự động biên dịch các tệp đã lưu.

Để biết thêm mẹo, hãy xem hướng dẫn "Di chuyển từ Eclipse sang IntelliJ IDEA" .


10
Cảm thấy khó chịu khi tôi phải cài đặt một plugin cho việc này. Tôi đã dành ngày hôm qua và hôm nay cho việc này. Tôi ước họ có thể xây dựng một tùy chọn cho việc này, tôi không nghĩ Eclipse có bằng sáng chế về tính năng này, phải không? Tôi cũng có thể ánh xạ lại vào CTRL + S để thực hiện khi nó tự động lưu. Tôi sẽ thử một vài lựa chọn. cảm ơn
mmm

14
Điều này là chậm. Điều này là quá chậm. Có nhiều chỗ để cải thiện! Tôi không phải là những gì nó làm trong nền, nhưng phải mất Intellij khoảng 3-4 giây để biên dịch một thay đổi nhỏ trong một lớp duy nhất. Ngay cả "Biên dịch 'StartControll.java'" có nghĩa là một lớp chỉ mất 3-4 giây. Eclipse thực hiện điều này trong chưa đầy 100 mili giây. Tôi sẽ kiểm tra lại plugin chế độ nhật thực một lần nữa và quyết định sẽ đi với cái gì ..
mmm

34
"Tạo dự án tự động" chỉ hoạt động khi không chạy / gỡ lỗi
xenoterracide

8
Không hoạt động với tôi với Intellij 2017.1.3 và devtools khởi động mùa xuân.
Nico de Wet

1
Đừng làm việc với IntelliJ IDEA 2017.3.3, Java 9.0.4, Spring Boot 2.0.0.RC1, Spring devtools :(
Do Nhu Vy

75

Vui lòng làm theo cả hai bước:

1 - Kích hoạt Automake từ trình biên dịch

  • Nhấn: ctrl+ shift+ A(Dành cho máy Mac + shift+ A)
  • Kiểu: make project automatically
  • Đánh: Enter
  • Kích hoạt Make Project automaticallytính năng

2 - Kích hoạt Tự động khi ứng dụng đang chạy

  • Nhấn: ctrl+ shift+ A(Dành cho máy Mac + shift+ A)
  • Kiểu: Registry
  • Tìm chìa khóa compiler.automake.allow.when.app.runningkích hoạt nó hoặc nhấp vào hộp kiểm bên cạnh nó

Lưu ý: Khởi động lại ứng dụng của bạn ngay bây giờ :)

Lưu ý: Điều này cũng sẽ cho phép tải lại trực tiếp với devtools khởi động mùa xuân.


2
Hoàn hảo, đây chỉ là những gì tôi đang tìm kiếm =)
eitch

3
Điều này cũng làm việc với tôi với spring-boot-devtools và IntelliJ IDEA 2016.2.5
Xaero Degreaz

2
Đúng vậy, vì vậy điều này dường như hoạt động trên IntelliJ 2017.1.3, tôi đã sử dụng tùy chọn 2 vì đây là những gì người ta cần với devtools khởi động mùa xuân.
Nico de Wet

1
Hoạt động tốt nhưng phải mất 4-5 giây để tải lại trong JRebel. Có cách nào khác không?
dùng3184974

1
Tôi không nghĩ các mục 1 & 2 ở trên là "tùy chọn", nhưng là các bước. Bạn cần phải làm cả hai.
Thomas Carlisle

67

CẢNH BÁO

Trình cắm thêm Chế độ Eclipse đã lỗi thời và không tương thích với các bản dựng IDEA 12+ gần đây. Nếu bạn cài đặt nó, IDE sẽ treo trên mỗi thay đổi tệp và sẽ phản hồi cực kỳ chậm.


IntelliJ IDEA không sử dụng xây dựng tự động, nó phát hiện lỗi khi đang di chuyển, không thông qua trình biên dịch. Tương tự như chế độ Eclipse sẽ có sẵn trong IDEA 12 :

Tạo dự án tự động

Sử dụng Build| Make, nó gọi quá trình tạo tăng dần sẽ chỉ biên dịch các tệp đã thay đổi và phụ thuộc (rất nhanh).

Ngoài ra còn có một mục FAQ có thể giúp đỡ.

Cập nhật tính năng tạo tự động : Khi cấu hình chạy / gỡ lỗi đang chạy, Make project automaticallykhông có hiệu lực. Các lớp trên đĩa sẽ chỉ thay đổi trên Build| Make. Đó là quyết định thiết kế cốt lõi vì theo quan điểm của chúng tôi, các thay đổi trên đĩa phải luôn nằm dưới sự kiểm soát của người dùng. Tự động tạo không phải là bản sao của tính năng Eclipse, nó hoạt động khác nhau và mục đích chính của nó là để tiết kiệm thời gian chờ đợi các lớp sẵn sàng khi chúng thực sự cần thiết (trước khi chạy ứng dụng hoặc kiểm tra). Tự động thực hiện không thay thế việc biên dịch rõ ràng mà bạn vẫn cần kích hoạt như trong trường hợp được mô tả trong câu hỏi này. Nếu bạn đang tìm kiếm các hành vi khác nhau, thì trình cắm thêm EclipseMode được liên kết trong Câu hỏi thường gặp ở trên sẽ là lựa chọn tốt hơn.


Vâng, tôi đã nhìn thấy nó trước đây, nhưng bác bỏ nó là quá chậm, với cửa sổ bật lên và tất cả. Nghĩ rằng nó là cho một cái gì đó khác. Tôi có thể dùng thử althoguh, CTRL + 9 gây khó chịu, nhưng tôi đoán tôi có thể ánh xạ lại với CTRL + S để thực hiện khi nó tự động lưu.
mmm

Cảm ơn các cập nhật. Tôi đã cài đặt plugin Chế độ Eclipse. Đừng có hộp thoại đó ... Ook .. Intellij 12 ... tốt, thật tốt khi bạn đang tiến bộ. Là intellij 12 thậm chí ra?
mmm

3
Tôi đã thử 12 ngày một vài ngày. Việc sử dụng xây dựng bên ngoài -> thực hiện tự động không kích hoạt bất kỳ hành động nào. Không có gì hạnh phúc. Khi tôi sử dụng plugin chế độ nhật thực (bật / tắt nó từ cài đặt) hoạt động tốt, nhưng khi tôi tắt plugin chế độ nhật thực và bật "sử dụng xây dựng bên ngoài -> tự động thực hiện" thì không có gì xảy ra khi chỉnh sửa và lưu ... mọi ý tưởng để tại sao?
mmm

2
@CrazyCoder Tôi vừa quay lại cái này và jRebel. Điều này là quá chậm. Có nhiều chỗ để cải thiện! Tôi không phải là những gì nó làm trong nền, nhưng phải mất Intellij khoảng 3-4 giây để biên dịch một thay đổi nhỏ trong một lớp duy nhất. Ngay cả "Biên dịch 'StartControll.java'" có nghĩa là một lớp chỉ mất 3-4 giây. Eclipse thực hiện điều này trong chưa đầy 100 mili giây. Tôi sẽ kiểm tra lại plugin và quyết định sẽ đi với cái gì ..
mmm

1
Đề xuất hành vi tab @SecretService được chào đón tại youtrack.jetbrains.com/issues/IDEA . Đã có một số vấn đề mở về các tab được ghim và ngăn chúng đóng lại.
CrazyCoder

38

Bạn có thể sơ đồ bàn phím ctrl+sđể lưu VÀ biên dịch trong một bước. Đi đến cài đặt sơ đồ bàn phím và tìm kiếm Compile.


3
Cảm ơn, tôi thích điều này nhất! Trình biên dịch tự động trong intellij, và cái này cũng vậy, nhưng ít nhất tôi thấy khi nó kết thúc bây giờ, thì quá chậm.
mmm

Không hoạt động với tôi, việc gán CTRL + S để biên dịch đã không khởi động lại máy chủ của tôi bắt đầu bằng nút gỡ lỗi
Dimitri Kopriwa

Nó hoạt động với tôi, Intellij 2018.2. Nó nên tìm kiếm Dự án Xây dựng
Neo Phạm

18

Thực tế không có sự khác biệt vì cả hai đều yêu cầu 1 lần nhấp:

  • Eclipse : thủ công Lưu, tự động biên dịch.
  • IntelliJ : tự động lưu, biên dịch thủ công.

Giải pháp đơn giản nhất là chỉ cần làm quen với nó. Bởi vì khi bạn dành phần lớn thời gian ban ngày trong IDE của mình, thì tốt hơn nên có thói quen nhanh trong một hơn là thói quen chậm ở một vài trong số chúng.


2
Có một cách để cải thiện trải nghiệm IntelliJ: lưu và biên dịch trong khi bạn chuyển sang trình duyệt
ruX

Eclipse có khả năng thêm các hành động lưu, bạn cũng có thể thực hiện những việc như tổ chức nhập khẩu và định dạng mã khi lưu. Thực hiện tất cả những điều này một cách thủ công sẽ thêm một số lần nhấn phím đáng kể và làm cho quá trình dễ bị lỗi hơn. Chẳng hạn, bạn không bao giờ có thể có mã không được định dạng nếu bạn định dạng lưu trong Eclipse. Rất dễ quên định dạng trong IntelliJ.
Tối đa

1
@Max, IntelliJ chạy các hành động đó trong thời gian cam kết (theo ý thích cá nhân của tôi là thời điểm tốt nhất). Trong một số trường hợp, nó cũng nêu bật các vấn đề về kiểu mã hóa trực tiếp trong trình soạn thảo (ví dụ: tuân thủ PEP8 cho python).
andruso

2
Làm quen với một thứ mà một IDE làm cho tôi và một cái khác thì không, làm cho cuộc sống của tôi trở nên khó khăn hơn, không phải là một điểm bán hàng tốt.
Jonathan

1
@Jonathan cải thiện khả năng sử dụng rất thường xuyên yêu cầu bỏ thói quen cũ, không cần thiết cho người dùng.
andruso

17

Cuối cùng tôi đã ghi lại một Macro để lưu và biên dịch trong một bước và sơ đồ phím Ctrl+scho nó.


5
@SecretService Có thể không hoạt động cho tất cả mọi người, vì thứ tự các hành động không được xác định khi nhiều hành động được ánh xạ tới cùng một phím tắt.
Celos

13

Tôi quản lý để giải quyết điều này bằng cách sử dụng macro.

Tôi bắt đầu ghi một macro:

  • Nhấp vào Chỉnh sửa - Macro - Bắt đầu ghi macro
  • Bấm vào Tệp - Lưu tất cả
  • Nhấp vào Xây dựng - Tạo dự án
  • Nhấp vào Chỉnh sửa - Macro - Dừng ghi macro

Đặt tên cho nó một cái gì đó hữu ích như, "SaveAndMake".

Bây giờ chỉ cần xóa Lưu tất cả các liên kết phím và thêm cùng một liên kết phím vào macro của bạn!

Vì vậy, bây giờ, mỗi khi tôi lưu, nó sẽ lưu và tạo một biên dịch bẩn, và jRebel bây giờ phát hiện tất cả các thay đổi một cách chính xác.


Sẽ đề nghị cung cấp cho macro một liên kết phím khác thay vì lưu tất cả hiện có - nhưng điều đó chỉ mang tính chủ quan như nhau.
arcseldon

Cảm ơn. Vì "Xây dựng" bình thường (như được đề xuất bởi các câu trả lời khác) thậm chí không đủ cho tôi, tôi sử dụng giải pháp này để lưu + xây dựng lại mỗi lần. Mang lại cho tôi cảm giác về Eclipse, ngay cả khi nó tiêu tốn nhiều tài nguyên ...
Boris

5

Vui lòng làm theo các bước cẩn thận để kích hoạt nó.

1) tạo dự án Spring Boot với SB V1.3 và thêm "Devtools" (1 *) cho các phụ thuộc

2) gọi Trợ giúp-> Tìm hành động ... và nhập "Sổ đăng ký", trong hộp thoại tìm kiếm "automake" và bật mục " Trình biên dịch.automake.allow.when.app.rucky ", đóng hộp thoại

3) cho phép biên dịch nền trong Cài đặt-> Xây dựng, Thi hành, Triển khai-> Trình biên dịch "Tạo dự án tự động"

4) mở cấu hình chạy Spring Boot, bạn sẽ nhận được thông báo cảnh báo nếu mọi thứ được cấu hình đúng

5) Chạy ứng dụng của bạn, thay đổi các lớp học của bạn một cách nhanh chóng

Vui lòng báo cáo kinh nghiệm và vấn đề của bạn như ý kiến ​​cho vấn đề này.

Bấm vào đây để biết thêm


Nó được đánh dấu là "Đang tiến hành" và không hoạt động đối với tôi.
JGarrido

2

Điều duy nhất làm việc cho tôi trong dự án maven của tôi bị ảnh hưởng bởi điều này là thêm mục tiêu "biên dịch thử nghiệm" vào cấu hình chạy thử nghiệm đơn vị của tôi. Giải pháp vô cùng vụng về, nhưng nó hoạt động.

nhập mô tả hình ảnh ở đây


ít nhất là nó hoạt động: D nhưng vâng, tốt hơn là tìm ra nguồn gốc của vấn đề này
anindis

2

Intellij thất bại lặng lẽ khi gặp sự cố biên dịch trong mô-đun khác, và sau đó quá trình xây dựng tự động không được thực hiện. Vì vậy, hãy kiểm tra Problemscửa sổ của bạn


1

Tôi gặp vấn đề tương tự. Tôi đã sử dụng "Chế độ tiết kiệm năng lượng", điều này ngăn việc biên dịch tăng dần và hiển thị các lỗi biên dịch.


Tôi không biết tại sao câu trả lời này lại bị bỏ qua, nó cũng trả lời câu hỏi, đối với tôi là như vậy - "Chế độ tiết kiệm năng lượng", mặc dù nó được viết trong cài đặt, nhưng với tính năng tự động biên dịch này không hoạt động.
Nerius Jok

1

Sử dụng plugin Reformat và Compile (lấy cảm hứng từ plugin Save Action của Alexandre DuBreuil):

https://plugins.jetbrains.com/plugin/8231?pr=idea_ce

Hiện tại tôi chỉ cung cấp một tệp jar, nhưng đây là phần quan trọng nhất của mã:

private final static Set<Document> documentsToProcess = new HashSet<Document>();
private static VirtualFile[] fileToCompile = VirtualFile.EMPTY_ARRAY;

// The plugin extends FileDocumentManagerAdapter.
// beforeDocumentSaving calls reformatAndCompile
private static void reformatAndCompile(
        @NotNull final Project project,
        @NotNull final Document document,
        @NotNull final PsiFile psiFile) {
    documentsToProcess.add(document);
    if (storage.isEnabled(Action.compileFile) && isDocumentActive(project, document)) {
        fileToCompile = isFileCompilable(project, psiFile.getVirtualFile());
    }
    ApplicationManager.getApplication().invokeLater(new Runnable() {
        @Override
        public void run() {
            if (documentsToProcess.contains(document)) {
                documentsToProcess.remove(document);
                if (storage.isEnabled(Action.optimizeImports)
                        || storage.isEnabled(Action.reformatCode)) {
                    CommandProcessor.getInstance().runUndoTransparentAction(new Runnable() {
                        @Override
                        public void run() {
                            if (storage.isEnabled(Action.optimizeImports)) {
                                new OptimizeImportsProcessor(project, psiFile)
                                    .run();
                            }
                            if (storage.isEnabled(Action.reformatCode)) {
                                new ReformatCodeProcessor(
                                        project,
                                        psiFile,
                                        null,
                                        ChangeListManager
                                            .getInstance(project)
                                            .getChange(psiFile.getVirtualFile()) != null)
                                                .run();
                            }
                            ApplicationManager.getApplication().runWriteAction(new Runnable() {
                                @Override
                                public void run() {
                                    CodeInsightUtilCore.forcePsiPostprocessAndRestoreElement(psiFile);
                                }
                            });
                        }
                    });
                }
            }

            if (fileToCompile.length > 0) {
                if (documentsToProcess.isEmpty()) {
                    compileFile(project, fileToCompile);
                    fileToCompile = VirtualFile.EMPTY_ARRAY;
                }
            } else if (storage.isEnabled(Action.makeProject)) {
                if (documentsToProcess.isEmpty()) {
                    makeProject(project);
                }
            } else {
                saveFile(project, document, psiFile.getVirtualFile());
            }
        }
    }, project.getDisposed());
}

private static void makeProject(@NotNull final Project project) {
    ApplicationManager.getApplication().invokeLater(new Runnable() {
        @Override
        public void run() {
            CompilerManager.getInstance(project).make(null);
        }
    }, project.getDisposed());
}

private static void compileFile(
        @NotNull final Project project,
        @NotNull final VirtualFile[] files) {
    ApplicationManager.getApplication().invokeLater(new Runnable() {
        @Override
        public void run() {
            CompilerManager.getInstance(project).compile(files, null);
        }
    }, project.getDisposed());
}

private static void saveFile(
        @NotNull final Project project,
        @NotNull final Document document,
        @NotNull final VirtualFile file) {
    ApplicationManager.getApplication().invokeLater(new Runnable() {
        @Override
        public void run() {
            final FileDocumentManager fileDocumentManager = FileDocumentManager.getInstance();
            if (fileDocumentManager.isFileModified(file)) {
                fileDocumentManager.saveDocument(document);
            }
        }
    }, project.getDisposed());
}

2
Tại sao mọi người sẽ tải xuống một số mã ngẫu nhiên và chạy nó?
Drew

@Drew: Chỉ cần tải nó lên Jetbrains để xem xét. Nhưng nếu bạn bị hoang tưởng, tôi cho rằng bạn có thể đợi vài ngày trước khi nó có sẵn từ đó ...
sbmpost

sbmpost, tôi chỉ đơn thuần chỉ ra lý do tại sao một số người (không phải là tôi đã làm) downvote, đánh dấu là Không phải là Câu trả lời, và xóa cái này.
Drew

Nếu đó là mã bạn có thể đăng, trong văn bản, đó là tuyệt vời. Bạn có thể? Đây là một trang web mã.
Drew

1
@drew: thêm ghi chú về jar và thêm một chút bối cảnh vào mã. Nó có vẻ ở mức cao, nhưng nếu bạn mở rộng từ FileDocumentManagerAdOG và thêm mã, bạn sẽ (gần như) có một lớp ReformatAndCompile biên dịch.
sbmpost

1

Chỉnh sửa cấu hình Run / Debug để tùy chọn Build được chọn trước khi khởi chạy

nhập mô tả hình ảnh ở đây

Sau khi tùy chọn Build được chọn

nhập mô tả hình ảnh ở đây

Giải pháp trên có hiệu quả với tôi khi làm việc với bộ kiểm tra JBehave của tôi


Điều này thật tuyệt, nhưng câu hỏi xoay quanh việc tự động biên dịch khi lưu, mà không phải biên dịch lại một lần nữa bằng cách sử dụng một lệnh tùy chỉnh, trước khi làm bất cứ điều gì như chạy thử nghiệm, v.v.,
kisna

1

Nó không hoạt động với tôi do có một mô-đun không cần thiết trong cấu trúc dự án của tôi. Các thử nghiệm đã được thực hiện bằng cách sử dụng các mô-đun khác, tôi cho rằng.

Tôi không biết làm thế nào nó kết thúc như vậy nhưng loại bỏ nó đã giải quyết vấn đề.

Đảm bảo cài đặt Run / Debug của bạn đang sử dụng mô-đun bạn đang xây dựng với chế độ tự động lưu.

Ví dụ: xem mô-đun trong

nhập mô tả hình ảnh ở đây

Bạn có thể thay đổi các mô-đun trong Cấu trúc dự án - Mô-đun

nhập mô tả hình ảnh ở đây


1

Tôi gặp vấn đề tương tự. Tôi nghĩ rằng nó sẽ thích hợp để kiểm tra xem lớp của bạn có thể được biên dịch hay không. Nhấp vào biên dịch lại (Ctrl + Shift + F9 theo mặc định). Nếu nó không hoạt động thì bạn phải điều tra lý do tại sao nó không biên dịch.

Trong trường hợp của tôi, mã không tự động biên dịch vì có lỗi ẩn khi biên dịch (chúng không được hiển thị trong nhật ký ở bất cứ đâu và maven Clean-install đang hoạt động). Nguyên nhân gốc là cấu trúc dự án không chính xác -> Cấu hình mô-đun, vì vậy Intellij Idea không thể xây dựng nó theo cấu hình này.


1

tôi đã có cùng một vấn đề và cũng là một biểu tượng tập tin vấn đề trong IntelliJ, vì vậy tôi loại bỏ các .ideadự án nhập khẩu thư mục và tái giải quyết vấn đề của tôi.


0

Tôi đã gặp lỗi: một số lọ không có trong classpath. Vì vậy, tôi chỉ cần xóa jar bị hỏng và perrform bên dưới các bước

1.Project >  Setting>Build,Execution,Deployment>Compiler>check build project automatically
2.CTRL+SHIFT+A find/search **registry** --Check for below param
compiler.automake.allow.when.app.running
compiler.automake.trigger.delay=500---According to ur requirement
3.Add devtool in pom.xml
         <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
        </dependency>
4.Build ,If found any probelm while building ,saying some jar in not in class path.Just delete the corrupted jar
and re-build the project angain after sync with maven lib

-1

Không đủ điểm để nhận xét về câu trả lời hiện có, nhưng tương tự như một số người ở trên, tôi chỉ cần thêm macro & sơ đồ bàn phím để Sắp xếp Nhập khẩu / Định dạng / Lưu Tất cả / FastReload (F9) / Đồng bộ hóa .

Đồng bộ hóa được thêm vào vì đây dường như là cách duy nhất tôi cũng có thể thấy các bản cập nhật trong tài nguyên được sửa đổi bởi các công cụ / trình theo dõi bên ngoài (ví dụ: webpack).

Quá trình này chậm hơn nhật thực - và để làm mới tệp bên ngoài thường phải chạy lệnh nhiều lần - nhưng giả sử tôi có thể sống với nó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.