{"id":14982973,"url":"https://github.com/hzxie/voj","last_synced_at":"2025-05-15T10:01:35.701Z","repository":{"id":21889855,"uuid":"25213631","full_name":"hzxie/voj","owner":"hzxie","description":"A cross-platform online judge system based on Spring MVC framework and ActiveMQ.","archived":false,"fork":false,"pushed_at":"2025-05-08T02:45:41.000Z","size":5510,"stargazers_count":604,"open_issues_count":8,"forks_count":121,"subscribers_count":28,"default_branch":"master","last_synced_at":"2025-05-08T03:32:37.932Z","etag":null,"topics":["activemq","docker","java","mybatis","online-judge","spring-mvc"],"latest_commit_sha":null,"homepage":"https://verwandlung.org","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hzxie.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2014-10-14T15:34:46.000Z","updated_at":"2025-05-08T02:45:39.000Z","dependencies_parsed_at":"2023-11-30T01:33:14.615Z","dependency_job_id":"2e467155-6f11-4ff9-b163-0098651600f2","html_url":"https://github.com/hzxie/voj","commit_stats":{"total_commits":506,"total_committers":10,"mean_commits":50.6,"dds":"0.11264822134387353","last_synced_commit":"12cd6a2dbaf4b23638e879e8ce4f538aea7320c8"},"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hzxie%2Fvoj","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hzxie%2Fvoj/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hzxie%2Fvoj/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hzxie%2Fvoj/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hzxie","download_url":"https://codeload.github.com/hzxie/voj/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254319715,"owners_count":22051072,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["activemq","docker","java","mybatis","online-judge","spring-mvc"],"created_at":"2024-09-24T14:06:31.101Z","updated_at":"2025-05-15T10:01:35.403Z","avatar_url":"https://github.com/hzxie.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"![Verwandlung Online Judge](https://raw.githubusercontent.com/hzxie/voj/master/web/src/main/webapp/assets/img/logo.png)\n\nVersion: 0.2.0 (Released on August 30, 2018)\n\n[![Build status](https://ci.appveyor.com/api/projects/status/j62ns9p8whttittm?svg=true)](https://ci.appveyor.com/project/hzxie/voj)\n[![Coverage Status](https://coveralls.io/repos/hzxie/voj/badge.svg?branch=master\u0026service=github)](https://coveralls.io/github/hzxie/voj?branch=master)\n[![Docker Automated build](https://img.shields.io/docker/automated/jrottenberg/ffmpeg.svg)](http://hub.docker.com/r/zjhzxhz)\n![badgegen](https://api.infinitescript.com/badgen/count.svg?name=hzxie/voj)\n\n[**Official Website**](https://verwandlung.org) | \n[**Tech Support**](https://infinitescript.com/project/verwandlung-online-judge/) |\n[**Change Log**](https://github.com/hzxie/voj/commits/master)\n\n**Update:** Verwandlung Online Judge now supports Docker. \nYou can use Verwandlung Online Judge with ONLY 4 bash commands.\n\n```\ndocker pull zjhzxhz/voj.web\ndocker pull zjhzxhz/voj.judger\ndocker run -d --name voj.web -p 8080:8080 zjhzxhz/voj.web\ndocker run -d --name voj.judger --link voj.web zjhzxhz/voj.judger\n```\n\nFor more information, please refer to [this documentation](https://github.com/hzxie/voj/tree/master/docker).\n\n---\n\n## Introduction\n\nIt is a cross-platform online judge system based on [Spring MVC Framework](http://spring.io).\n\nThe application used following open-source projects:\n\n - [Spring MVC](http://spring.io) famework\n - [MyBatis](https://mybatis.github.io/mybatis-3/index.html) persistence framework\n - [Apache ActiveMQ](http://activemq.apache.org/) message queue\n - [Druid](https://github.com/alibaba/druid/) database connection pool\n - [Flat UI](http://designmodo.github.io/Flat-UI/)\n - [jQuery](http://jquery.com)\n - [FontAwesome](http://fontawesome.io)\n - [CodeMirror](http://codemirror.net)\n - [Highlight.js](https://highlightjs.org/)\n\n### The Origin of Verwandlung\n\nIn 2011, LinkedIn Inc. launched a message queue called [Kafka](http://kafka.apache.org/), which is written in Scala and available as open-source software.\n\nA year later, Alibaba Inc. introduced a message queue named [MetaQ](https://github.com/killme2008/Metamorphosis) which is built on top of Kafka and implemented in Java. The name \"MetaQ\" is derived from the title of a renowned literary work, \"Metamorphosis\", authored by Franz Kafka.\n\nSince message queues are vital components in an application, the name of the application was chosen as \"Verwandlung\", which is the German translation for \"*Metamorphosis*\".\n\n### Architecture\n\nThe Verwandlung application consists of two primary components:\n\n- Web Application\n- Judger (compatible with both Windows and Linux operating systems)\n\nThe overall architecture of the application can be illustrated by the diagram provided below:\n\n![Software-Architecture](https://www.infinitescript.com/projects/Verwandlung/Software-Architecture.png)\n\nAs depicted in the diagram, the Verwandlung Online Judge features support for multiple judgers. These judgers are responsible for communicating with the web application through the use of ActiveMQ.\n\n---\n\n## Getting Started\n\n### System Requirements\n\n#### Hardware Requirements\n\n- **CPU**: 2.0 GHz or faster 32-bit (x86) or 64-bit (x64) processor\n\nFor Web Application (including Database and Message Queue):\n\n- **RAM**: 2.0 GB RAM on Windows, 1.0 GB RAM on Linux.\n\nFor Judger:\n\n- **RAM**: 1.0 GB RAM on Windows, 512 MB RAM on Linux.\n\n#### Software Requirements\n\nFor Web Application (including Database and Message Queue):\n\n- **Operating System**: Windows, Linux or Mac\n- **Database**: [MySQL](http://www.mysql.com) 5.5+ or [MariaDB](https://mariadb.org/) 5.5+\n- **Java Runtime**: [Oracle JRE](http://java.oracle.com) 17+ or [Oracle JDK](http://java.oracle.com) 17+\n- **Message Queue**: [ActiveMQ](http://activemq.apache.org) 5.18+\n- **Web Server**: [Tomcat](http://tomcat.apache.org) 10+\n\nFor Judger:\n\n- **Operating System**: Windows or Linux\n- **Java Runtime**: [Oracle JRE](http://java.oracle.com) 17+ or [Oracle JDK](http://java.oracle.com) 17+\n\n### Installation\n\n#### Docker Releases (Recommended)\n\nNow you can easily use Verwandlung Online Judge with Docker.\n\nSee the installation instructions [here](https://github.com/hzxie/voj/tree/master/docker).\n\n#### Binary Releases\n\n- **Web Application**: [0.2.0](https://github.com/hzxie/voj/releases/download/0.2.0/voj.war)\n- **Judger (Windows, 64 Bit)**: [0.2.0](https://github.com/hzxie/voj/releases/download/0.2.0/voj-judger-windows-x64.jar)\n- **Judger (Linux, 64 Bit)**: [0.2.0](https://github.com/hzxie/voj/releases/download/0.2.0/voj-judger-linux-x64.jar)\n\n#### Source Releases\n\n**NOTE:** \n\n- [Maven](http://maven.apache.org) 3+ and [GCC](http://gcc.gnu.org/) 4.8+ with **POSIX thread model** is required.\n- Make sure `mvn` (Maven), `g++` and `make` are added to the PATH.\n\nAfter download source code from this repository, run following commands from a terminal:\n\nFor Web Application:\n\n```\ncd web\nmvn package -DskipTests\n```\n\nIf the build is successful, the terminal will display a message as following:\n\n```\n[INFO] ------------------------------------------------------------------------\n[INFO] BUILD SUCCESS\n[INFO] ------------------------------------------------------------------------\n[INFO] Total time: 10.168 s\n[INFO] Finished at: 2015-11-26T13:20:09+08:00\n[INFO] Final Memory: 24M/210M\n[INFO] ------------------------------------------------------------------------\n```\n\nAnd you'll get a package named `voj.web.war` in the `target` folder.\n\nFor Judger:\n\n**Windows**:\n\n```\ncd %JAVA_HOME%\\include\\win32\ncopy jawt_md.h  ..\ncopy jni_md.h  ..\n\ncd judger\nmvn package -DskipTests\n```\n\n**Linux**:\n\n```\ncd $JAVA_HOME/include/linux\ncp jawt_md.h jni_md.h ..\n\ncd SOURCE_CODE_PATH/judger\nmvn package -DskipTests\n```\n\nIf the build is successful, the terminal will display a message as following:\n\n```\n[INFO] Executing tasks\n\njni:\n     [echo] Generating JNI headers\n     [exec] mkdir -p target/cpp\n     [exec] g++ -c -std=c++11 -Wall -fPIC -I ... -o target/cpp/Judger.Core.Runner.o\n[INFO] Executed tasks\n...\n[INFO] ------------------------------------------------------------------------\n[INFO] BUILD SUCCESS\n[INFO] ------------------------------------------------------------------------\n[INFO] Total time: 12.432 s\n[INFO] Finished at: 2015-11-26T13:22:46+08:00\n[INFO] Final Memory: 81M/513M\n[INFO] ------------------------------------------------------------------------\n```\n\nAnd you'll get a package named `voj.judger.jar` in the `target` folder.\n\n### Configuration\n\n#### Setup the ActiveMQ\n\nTo reduce the memory of ActiveMQ, you can edit `activemq.xml` in `ACTIVEMQ_HOME\\conf`.\n\nPlease find following content in this file, and change it to proper values that suitable for your servers.\n\n```\n\u003csystemUsage\u003e\n    \u003csystemUsage\u003e\n        \u003cmemoryUsage\u003e\n            \u003c!-- Change this value --\u003e\n            \u003cmemoryUsage limit=\"128 mb\" /\u003e\n        \u003c/memoryUsage\u003e\n        \u003cstoreUsage\u003e\n            \u003c!-- Change this value --\u003e\n            \u003cstoreUsage limit=\"4 gb\"/\u003e\n        \u003c/storeUsage\u003e\n        \u003ctempUsage\u003e\n            \u003c!-- Change this value --\u003e\n            \u003ctempUsage limit=\"4 gb\"/\u003e\n        \u003c/tempUsage\u003e\n    \u003c/systemUsage\u003e\n\u003c/systemUsage\u003e\n```\n\n#### Setup the Web Application\n\nCreate a database in MySQL, import `voj.sql`.\n\nEdit the values in `/WEB-INF/classes/voj.properties` of the file `voj.web.war`.\n\nYou can open it with archive manager software such as `WinRAR`.\n\nAfter then, you can copy this file `voj.web.war` to `TOMCAT_HOME/webapps`.\n\n**IMPORTANT:** For Windows users, please edit `server.xml` of your Tomcat configuration:\n\n```\n\u003cConnector connectionTimeout=\"20000\" port=\"8080\" protocol=\"HTTP/1.1\"\n    redirectPort=\"8443\" useBodyEncodingForURI=\"true\"\u003e\n\u003c/Connector\u003e\n```\n\n#### Setup the Judger\n\nEdit the values in `/voj.properties` of the file `voj.judger.jar`.\n\nYou can run the judger using following command :\n\n**Windows**:\n\n```\njavaw -jar voj.judger.jar\n```\n\n**Linux**:\n\n```\nsudo java -jar voj.judger.jar\n```\n\n**Important:**\n\nIf you are using Linux, please run following commands using `root`:\n\n```\n# Shutdown and Kill process is not allowed for non-root user\nchmod 700 /sbin/init\nchmod 700 /sbin/poweroff\nchmod 700 /usr/bin/pkill\n```\n\n---\n\n### Contribution\n\nWe're glad that you want to improve this project. \n\n- **We NEED TRANSLATORS** for multi-language support(English and Chinese have supported).\n- You can report bugs [here](https://github.com/hzxie/voj/issues).\n- You can also create a pull request if you can fix the bug.\n- If you want to add features to the project, please tell us in the [issues](https://github.com/hzxie/voj/issues) page before developing.\n\nThanks for your corporation.\n\n### License\n\nThis project is open sourced under GNU GPL v3.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhzxie%2Fvoj","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhzxie%2Fvoj","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhzxie%2Fvoj/lists"}