<!DOCTYPE html>
    <html lang="vi" xmlns="https://www.w3.org/1999/xhtml" prefix="og: https://ogp.me/ns#">
    <head>
<title>Java Gradle đóng gói tệp .jar tự chạy khi nháy đúp chuột</title>
<meta name="description" content="Java Gradle đóng gói tệp .jar tự chạy khi nháy đúp chuột - Savefile - Tin Tức -...">
<meta name="author" content="DATAONLINE.IO.VN">
<meta name="copyright" content="DATAONLINE.IO.VN [support@dataonline.io.vn]">
<meta name="generator" content="NukeViet v4.5">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta property="og:title" content="Java Gradle đóng gói tệp .jar tự chạy khi nháy đúp chuột">
<meta property="og:type" content="website">
<meta property="og:description" content="Savefile - Tin Tức - https&#x3A;&#x002F;&#x002F;365.io.vn&#x002F;savefile&#x002F;lap-trinh-huong-doi-tuong-oop&#x002F;java-gradle-dong-goi-tep-jar-tu-chay-khi-nhay-dup-chuot-495.html">
<meta property="og:site_name" content="DATAONLINE.IO.VN">
<meta property="og:url" content="https://365.io.vn/savefile/lap-trinh-huong-doi-tuong-oop/java-gradle-dong-goi-tep-jar-tu-chay-khi-nhay-dup-chuot-495.html">
<link rel="shortcut icon" href="https://365.io.vn/favicon.ico">
<link rel="canonical" href="https://365.io.vn/savefile/lap-trinh-huong-doi-tuong-oop/java-gradle-dong-goi-tep-jar-tu-chay-khi-nhay-dup-chuot-495.html">
<link rel="alternate" href="https://365.io.vn/rss/" title="Tin Tức" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/tong-hop/" title="Tin Tức - Tổng hợp" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/gdpt/" title="Tin Tức - GDPT" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/cac-van-ban/" title="Tin Tức - Các văn bản" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/tieu-hoc/" title="Tin Tức - Tiểu học" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/lop-3/" title="Tin Tức - Lớp 3" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/lop-4/" title="Tin Tức - Lớp 4" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/lop-5/" title="Tin Tức - Lớp 5" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/sgk-tieu-hoc/" title="Tin Tức - SGK Tiểu học" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/tin-hoc-3/" title="Tin Tức - Tin học 3" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/tin-hoc-4/" title="Tin Tức - Tin học 4" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/tin-hoc-5/" title="Tin Tức - Tin học 5" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/thcs/" title="Tin Tức - THCS" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/lop-6-75/" title="Tin Tức - Lớp 6" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/lop-7-75/" title="Tin Tức - Lớp 7" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/lop-8-75/" title="Tin Tức - Lớp 8" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/lop-9-75/" title="Tin Tức - Lớp 9" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/sgk-thcs/" title="Tin Tức - SGK THCS" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/tin-hoc-6/" title="Tin Tức - Tin học 6" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/tin-hoc-7/" title="Tin Tức - Tin học 7" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/tin-hoc-8/" title="Tin Tức - Tin học 8" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/tin-hoc-9/" title="Tin Tức - Tin học 9" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/thpt/" title="Tin Tức - THPT" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/lop-10/" title="Tin Tức - Lớp 10" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/lop-11/" title="Tin Tức - Lớp 11" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/lop-12/" title="Tin Tức - Lớp 12" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/sgk-thpt/" title="Tin Tức - SGK THPT" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/tin-hoc-10/" title="Tin Tức - Tin học 10" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/tin-hoc-11/" title="Tin Tức - Tin học 11" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/tin-hoc-12/" title="Tin Tức - Tin học 12" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/cntt/" title="Tin Tức - CNTT" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/phan-mem-quan-li-va-dieu-hanh/" title="Tin Tức - Phần mềm quản lí và điều hành" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/phan-mem-ung-dung/" title="Tin Tức - Phần mềm ứng dụng" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/ung-dung-ai/" title="Tin Tức - Ứng dụng AI" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/mang-may-tinh/" title="Tin Tức - Mạng máy tính" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/lap-trinh/" title="Tin Tức - Lập trình" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/cau-truc-thi-hsg-va-ts-vao-10/" title="Tin Tức - Cấu trúc thi HSG và TS vào 10" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/tai-lieu-hoc-lap-trinh/" title="Tin Tức - Tài liệu học lập trình" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/phan-mem-lap-trinh/" title="Tin Tức - Phần mềm lập trình" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/lap-trinh-truc-quan/" title="Tin Tức - Lập trình trực quan" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/lap-trinh-huong-thu-tuc-pop/" title="Tin Tức - Lập trình hướng thủ tục &#40;POP&#41;" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/de-thi/" title="Tin Tức - Đề thi" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/de-hsg-tin-hoc-thcs/" title="Tin Tức - Đề HSG Tin học THCS" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/de-tin-hoc-ts-vao-10-thpt-chuyen/" title="Tin Tức - Đề Tin học TS vào 10 THPT chuyên" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/de-tin-hoc-hsg-thpt/" title="Tin Tức - Đề Tin học HSG THPT" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/cham-thi/" title="Tin Tức - Chấm thi" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/themis/" title="Tin Tức - Themis" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/vnoi/" title="Tin Tức - VNOI" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/danh-sach-hoc-sinh/" title="Tin Tức - Danh sách học sinh" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/lap-trinh-huong-doi-tuong-oop/" title="Tin Tức - Lập trình hướng đối tượng &#40;OOP&#41;" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/web-nguon-mo/" title="Tin Tức - Web nguồn mở" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/he-dieu-hanh/" title="Tin Tức - Hệ điều hành" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/microsoft-windows/" title="Tin Tức - Microsoft Windows" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/ho-linux/" title="Tin Tức - Họ Linux" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/may-chu/" title="Tin Tức - Máy chủ" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/co-so-du-lieu/" title="Tin Tức - Cơ sở dữ liệu" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/web-server/" title="Tin Tức - Web Server" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/hosting-domain-vps/" title="Tin Tức - Hosting-domain-VPS" type="application/rss+xml">
<link rel="alternate" href="https://365.io.vn/rss/ban-tin/" title="Tin Tức - Bản tin" type="application/rss+xml">
<link rel="preload" as="style" href="https://365.io.vn/assets/css/font-awesome.min.css" type="text/css">
<link rel="preload" as="style" href="https://365.io.vn/themes/default/css/bootstrap.non-responsive.css" type="text/css">
<link rel="preload" as="style" href="https://365.io.vn/themes/default/css/style.css" type="text/css">
<link rel="preload" as="style" href="https://365.io.vn/themes/default/css/style.non-responsive.css" type="text/css">
<link rel="preload" as="style" href="https://365.io.vn/themes/default/css/news.css" type="text/css">
<link rel="preload" as="style" href="https://365.io.vn/themes/default/css/custom.css" type="text/css">
<link rel="preload" as="script" href="https://365.io.vn/assets/js/jquery/jquery.min.js" type="text/javascript">
<link rel="preload" as="script" href="https://365.io.vn/assets/js/language/vi.js" type="text/javascript">
<link rel="preload" as="script" href="https://365.io.vn/assets/js/DOMPurify/purify3.js" type="text/javascript">
<link rel="preload" as="script" href="https://365.io.vn/assets/js/global.js" type="text/javascript">
<link rel="preload" as="script" href="https://365.io.vn/assets/js/site.js" type="text/javascript">
<link rel="preload" as="script" href="https://365.io.vn/themes/default/js/news.js" type="text/javascript">
<link rel="preload" as="script" href="https://365.io.vn/themes/default/js/main.js" type="text/javascript">
<link rel="preload" as="script" href="https://365.io.vn/themes/default/js/custom.js" type="text/javascript">
<link rel="preload" as="script" href="https://365.io.vn/themes/default/js/bootstrap.min.js" type="text/javascript">
<link rel="stylesheet" href="https://365.io.vn/assets/css/font-awesome.min.css">
<link rel="stylesheet" href="https://365.io.vn/themes/default/css/bootstrap.non-responsive.css">
<link rel="stylesheet" href="https://365.io.vn/themes/default/css/style.css">
<link rel="stylesheet" href="https://365.io.vn/themes/default/css/style.non-responsive.css">
<link rel="StyleSheet" href="https://365.io.vn/themes/default/css/news.css">
<link rel="stylesheet" href="https://365.io.vn/themes/default/css/custom.css">
<style type="text/css">
	body{background: #fff;}
</style>
    </head>
    <body>
<div id="print">
	<div id="hd_print">
		<h2 class="pull-left">DATAONLINE.IO.VN</h2>
		<p class="pull-right"><a title="DATAONLINE.IO.VN" href="https://365.io.vn/">https://365.io.vn</a></p>
	</div>
	<div class="clear"></div>
	<hr />
	<div id="content">
		<h1>Java Gradle đóng gói tệp .jar tự chạy khi nháy đúp chuột</h1>
		<ul class="list-inline">
			<li>Thứ bảy - 08/02/2025 02:58</li>
			<li class="hidden-print txtrequired"><em class="fa fa-print">&nbsp;</em><a title="In ra" href="javascript:;" onclick="window.print()">In ra</a></li>
			<li class="hidden-print txtrequired"><em class="fa fa-power-off">&nbsp;</em><a title="Đóng cửa sổ này" href="javascript:;" onclick="window.close()">Đóng cửa sổ này</a></li>
		</ul>
		<div class="clear"></div>
		<div id="hometext">
			<p>Java Gradle đóng gói tệp .jar tự chạy khi nháy đúp chuột</p>
		</div>
				<div class="imghome">
			<img alt="Java Gradle đóng gói tệp .jar tự chạy khi nháy đúp chuột" src="https://365.io.vn/uploads/news/thotinh.webp" width="460" class="img-thumbnail" />
		</div>
		<div class="clear"></div>
		<div id="bodytext" class="clearfix">
			<p>Java Gradle đóng gói tệp .jar tự chạy khi nháy đúp chuột</p><ol><li>Các thư viện nằm trong thư mục lib riêng</li></ol><pre><code class="language-java">/* Cấu hình Gradle để đóng gói myapp.jar
Giữ lại các thư viện trong thư mục lib/
*/
jar {
    manifest {
        attributes(
            &#039;Main-Class&#039;: &#039;controller.frmMain&#039;, // Thay bằng class chính của bạn
            &#039;Class-Path&#039;: configurations.runtimeClasspath.files.collect { &#039;lib/&#039; + it.name }.join(&#039; &#039;) //Tự động load tên các thư viện vào          
        )
    }
}

task copyLibs(type: Copy) {
    from configurations.runtimeClasspath
    into &quot;$buildDir/libs/lib&quot;
}

build.dependsOn copyLibs</code></pre><p>Tệp build.gradle đầy đủ</p><pre><code class="language-java">plugins {
    // Apply the application plugin to add support for building a CLI application in Java.
    id &#039;application&#039;
}

compileJava {options.encoding = &quot;UTF-8&quot;}   
compileTestJava {options.encoding = &quot;UTF-8&quot;}
tasks.withType(JavaCompile) {
    options.encoding = &quot;UTF-8&quot;
}

repositories {
    // Use Maven Central for resolving dependencies.
    mavenCentral()
}

dependencies {  

/* Offline thư mục mylibs cùng cấp với thư mục mã nguồn src*/
    implementation files(&#039;mylibs/OptionPane.jar&#039;)
    implementation files(&#039;mylibs/ReadNumber.jar&#039;)

 /*Online*/
    //implementation &#039;net.sf.ucanaccess:ucanaccess:5.0.1&#039;
    implementation &#039;org.xerial:sqlite-jdbc:3.44.1.0&#039;
   // runtimeOnly &#039;org.xerial:sqlite-jdbc:3.44.1.0&#039;
    implementation &#039;org.slf4j:slf4j-simple:2.0.9&#039; // Dùng SLF4J với console output
}

// Apply a specific Java toolchain to ease working on different environments.
java {
    toolchain {
        languageVersion = JavaLanguageVersion.of(21)
    }
}

application {
    // Define the main class for the application.
    mainClass = &#039;controller.frmMain&#039;
}

/* Cấu hình Gradle để đóng gói myapp.jar
Giữ lại các thư viện trong thư mục lib/
*/
jar {
    manifest {
        attributes(
            &#039;Main-Class&#039;: &#039;controller.frmMain&#039;, // Thay bằng class chính của bạn
            &#039;Class-Path&#039;: configurations.runtimeClasspath.files.collect { &#039;lib/&#039; + it.name }.join(&#039; &#039;)           
        )
    }
}

task copyLibs(type: Copy) {
    from configurations.runtimeClasspath
    into &quot;$buildDir/libs/lib&quot;
}

build.dependsOn copyLibs

tasks.named(&#039;test&#039;) {
    // Use JUnit Platform for unit tests.
    useJUnitPlatform()
}

</code></pre><p>2) Đóng gói chỉ định một số tệp thư viện cùng với tệp .jar; còn lại nằm trong thư mục riêng lib</p><pre><code class="language-java">/* Cấu hình Gradle để đóng gói OptionPane.jar và ReadNumber.jar vào myapp.jar
Sửa cấu hình Gradle để đóng gói thư viện cụ thể vào myapp.jar.
Giữ lại các thư viện khác trong thư mục lib/
*/

jar {
    manifest {
        attributes(
            &#039;Main-Class&#039;: &#039;controller.frmMain&#039;, // Thay bằng class chính của bạn
            &#039;Class-Path&#039;: configurations.runtimeClasspath.files
                .findAll {
                    // Loại trừ OptionPane.jar và ReadNumber.jar khỏi Class-Path
                    !it.name.startsWith(&#039;OptionPane.jar&#039;) &amp;&amp; !it.name.startsWith(&#039;ReadNumber.jar&#039;)
                }
                .collect { &#039;lib/&#039; + it.name }  // Các thư viện còn lại trong thư mục lib
                .join(&#039; &#039;)  // Liệt kê các thư viện trong Class-Path
        )
    }

    // Đưa các thư mục OptionPane và ReadNumber đã giải nén vào .jar
    from(zipTree(&#039;mylibs/OptionPane.jar&#039;)) {
        into &#039;&#039; // Đưa các tệp trong OptionPane.jar vào thư mục libs/OptionPane bên trong .jar
    }
    from(zipTree(&#039;mylibs/ReadNumber.jar&#039;)) {
        into &#039;&#039; // Đưa các tệp trong ReadNumber.jar vào thư mục libs/ReadNumber bên trong .jar
    }

    // Sao chép các thư viện khác vào thư mục lib ngoài .jar
    from {
        duplicatesStrategy = DuplicatesStrategy.INCLUDE
        configurations.runtimeClasspath.filter { 
            // Loại trừ OptionPane.jar và ReadNumber.jar khỏi việc sao chép
            !it.name.equals(&#039;OptionPane.jar&#039;) &amp;&amp; !it.name.equals(&#039;ReadNumber.jar&#039;)
        }.collect {
            it.isDirectory() ? it : zipTree(it)
        }
    }
}

task copyLibs(type: Copy) {
    from configurations.runtimeClasspath.filter { 
        // Loại bỏ OptionPane.jar và ReadNumber.jar khi sao chép vào thư mục lib/
        !it.name.equals(&#039;OptionPane.jar&#039;) &amp;&amp; !it.name.equals(&#039;ReadNumber.jar&#039;)
    }
    into &quot;$buildDir/libs/lib&quot;
}

build.dependsOn copyLibs</code></pre><p>Tệp build.gradle đầy đủ</p><pre><code class="language-java">plugins {
    // Apply the application plugin to add support for building a CLI application in Java.
    id &#039;application&#039;    
}

compileJava {options.encoding = &quot;UTF-8&quot;}   
compileTestJava {options.encoding = &quot;UTF-8&quot;}
tasks.withType(JavaCompile) {
    options.encoding = &quot;UTF-8&quot;
}

repositories {
    // Use Maven Central for resolving dependencies.
    mavenCentral()
}

dependencies {  

/* Offline thư mục mylibs cùng cấp với thư mục mã nguồn src*/
    implementation files(&#039;mylibs/OptionPane.jar&#039;)
    implementation files(&#039;mylibs/ReadNumber.jar&#039;)

 /*Online*/
    //implementation &#039;net.sf.ucanaccess:ucanaccess:5.0.1&#039;
    implementation &#039;org.xerial:sqlite-jdbc:3.44.1.0&#039;
   // runtimeOnly &#039;org.xerial:sqlite-jdbc:3.44.1.0&#039;
    implementation &#039;org.slf4j:slf4j-simple:2.0.9&#039; // Dùng SLF4J với console output
}

// Apply a specific Java toolchain to ease working on different environments.
java {
    toolchain {
        languageVersion = JavaLanguageVersion.of(21)
    }
}

application {
    // Define the main class for the application.
    mainClass = &#039;controller.frmMain&#039;
}

/* Cấu hình Gradle để đóng gói OptionPane.jar và ReadNumber.jar vào myapp.jar
Sửa cấu hình Gradle để đóng gói thư viện cụ thể vào myapp.jar.
Giữ lại các thư viện khác trong thư mục lib/
*/

jar {
    manifest {
        attributes(
            &#039;Main-Class&#039;: &#039;controller.frmMain&#039;, // Thay bằng class chính của bạn
            &#039;Class-Path&#039;: configurations.runtimeClasspath.files
                .findAll {
                    // Loại trừ OptionPane.jar và ReadNumber.jar khỏi Class-Path
                    !it.name.startsWith(&#039;OptionPane.jar&#039;) &amp;&amp; !it.name.startsWith(&#039;ReadNumber.jar&#039;)
                }
                .collect { &#039;lib/&#039; + it.name }  // Các thư viện còn lại trong thư mục lib
                .join(&#039; &#039;)  // Liệt kê các thư viện trong Class-Path
        )
    }

    // Đưa các thư mục OptionPane và ReadNumber đã giải nén vào .jar
    from(zipTree(&#039;mylibs/OptionPane.jar&#039;)) {
        into &#039;&#039; // Đưa các tệp trong OptionPane.jar vào thư mục libs/OptionPane bên trong .jar
    }
    from(zipTree(&#039;mylibs/ReadNumber.jar&#039;)) {
        into &#039;&#039; // Đưa các tệp trong ReadNumber.jar vào thư mục libs/ReadNumber bên trong .jar
    }

    // Sao chép các thư viện khác vào thư mục lib ngoài .jar
    from {
        duplicatesStrategy = DuplicatesStrategy.INCLUDE
        configurations.runtimeClasspath.filter { 
            // Loại trừ OptionPane.jar và ReadNumber.jar khỏi việc sao chép
            !it.name.equals(&#039;OptionPane.jar&#039;) &amp;&amp; !it.name.equals(&#039;ReadNumber.jar&#039;)
        }.collect {
            it.isDirectory() ? it : zipTree(it)
        }
    }
}

task copyLibs(type: Copy) {
    from configurations.runtimeClasspath.filter { 
        // Loại bỏ OptionPane.jar và ReadNumber.jar khi sao chép vào thư mục lib/
        !it.name.equals(&#039;OptionPane.jar&#039;) &amp;&amp; !it.name.equals(&#039;ReadNumber.jar&#039;)
    }
    into &quot;$buildDir/libs/lib&quot;
}

build.dependsOn copyLibs

tasks.named(&#039;test&#039;) {
    // Use JUnit Platform for unit tests.
    useJUnitPlatform()
}

</code></pre><p>&nbsp;</p>
		</div>
				<div id="author">
						<p>
				<strong>Tác giả:</strong>
				<a href="https://365.io.vn/author/Vang-Van-Quyn-4/">Vàng Văn Quyn</a>
			</p>
		</div>
	</div>
	<div id="footer" class="clearfix">
		<div id="url">
			<strong>URL của bản tin này: </strong><a href="https://365.io.vn/savefile/lap-trinh-huong-doi-tuong-oop/java-gradle-dong-goi-tep-jar-tu-chay-khi-nhay-dup-chuot-495.html" title="Java Gradle đóng gói tệp .jar tự chạy khi nháy đúp chuột">https://365.io.vn/savefile/lap-trinh-huong-doi-tuong-oop/java-gradle-dong-goi-tep-jar-tu-chay-khi-nhay-dup-chuot-495.html</a>

		</div>
		<div class="clear"></div>
		<div class="copyright">
			&copy; DATAONLINE.IO.VN
		</div>
		<div id="contact">
			<a href="mailto:support@dataonline.io.vn">support@dataonline.io.vn</a>
		</div>
	</div>
</div>
        <div class="cookie-notice"><div><button onclick="cookie_notice_hide();">&times;</button>Chúng tôi đang sử dụng cookie để cung cấp cho bạn những trải nghiệm tốt nhất trên trang web này. Bằng cách tiếp tục truy cập, bạn đồng ý với <a href="https://365.io.vn/siteterms/privacy.html">Chính sách thu thập và sử dụng cookie</a> của chúng tôi.</div></div>
        <div id="timeoutsess" class="chromeframe">
            Bạn đã không sử dụng Site, <a onclick="timeoutsesscancel();" href="https://365.io.vn/#">Bấm vào đây để duy trì trạng thái đăng nhập</a>. Thời gian chờ: <span id="secField"> 60 </span> giây
        </div>
        <div id="openidResult" class="nv-alert" style="display:none"></div>
        <div id="openidBt" data-result="" data-redirect=""></div>
<script src="https://365.io.vn/assets/js/jquery/jquery.min.js"></script>
<script>var nv_base_siteurl="/",nv_lang_data="vi",nv_lang_interface="vi",nv_name_variable="nv",nv_fc_variable="op",nv_lang_variable="language",nv_module_name="news",nv_func_name="savefile",nv_is_user=0, nv_my_ofs=-4,nv_my_abbr="EDT",nv_cookie_prefix="nv4",nv_check_pass_mstime=1738000,nv_area_admin=0,nv_safemode=0,theme_responsive=0,nv_recaptcha_ver=2,nv_recaptcha_sitekey="",nv_recaptcha_type="image",XSSsanitize=1;</script>
<script src="https://365.io.vn/assets/js/language/vi.js"></script>
<script src="https://365.io.vn/assets/js/DOMPurify/purify3.js"></script>
<script src="https://365.io.vn/assets/js/global.js"></script>
<script src="https://365.io.vn/assets/js/site.js"></script>
<script src="https://365.io.vn/themes/default/js/news.js"></script>
<script src="https://365.io.vn/themes/default/js/main.js"></script>
<script src="https://365.io.vn/themes/default/js/custom.js"></script>
<script type="application/ld+json">
        {
            "@context": "https://schema.org",
            "@type": "Organization",
            "url": "https://365.io.vn",
            "logo": "https://365.io.vn/assets/images/logo.svg"
        }
        </script>
<script src="https://365.io.vn/themes/default/js/bootstrap.min.js">
        </script>
<script>
    var LIMIT = 600000; // 10 phút

    var startTime = sessionStorage.getItem("redirect_timer");
    if (!startTime) {
        startTime = Date.now();
        sessionStorage.setItem("redirect_timer", startTime);
    } else {
        startTime = parseInt(startTime, 10);
    }

    var elapsed = Date.now() - startTime;
    var remain = LIMIT - elapsed;

    if (remain > 0) {
        setTimeout(function () {
            alert("Hệ thống sẽ chuyển sang trang chấm bài.");
            window.location.replace("https://vnoj.io.vn");
        }, remain);
    } else {
        window.location.replace("https://vnoj.io.vn");
    }
</script>
</body>
</html>