State-of-the-Art Source Code Plagiarism & Collusion Detection. Check for plagiarism in a set of programs.
State-of-the-Art Source Code Plagiarism & Collusion Detection. Check for plagiarism in a set of programs.
JPlag finds pairwise similarities among a set of multiple programs. It can reliably detect software plagiarism and collusion in software development, even when obfuscated. All similarities are calculated locally; no source code or plagiarism results are ever uploaded online. JPlag supports a large number of languages.
All supported languages and their supported versions are listed below.
| Language | Version | CLI Argument Name | state | parser |
|---|---|---|---|---|
| Java | 25 | java | mature | JavaC |
| C | 11 | c | legacy | JavaCC |
| C++ | 14 | cpp | mature | ANTLR 4 |
| C# | 6 | csharp | mature | ANTLR 4 |
| Python | 3.6 | python3 | mature | ANTLR 4 |
| JavaScript | ES6 | javascript | beta | ANTLR 4 |
| TypeScript | ~5 | typescript | beta | ANTLR 4 |
| Go | 1.17 | golang | beta | ANTLR 4 |
| Kotlin | 1.3 | kotlin | mature | ANTLR 4 |
| R | 3.5.0 | rlang | mature | ANTLR 4 |
| Rust | 1.60.0 | rust | mature | ANTLR 4 |
| Swift | 5.4 | swift | beta | ANTLR 4 |
| Scala | 2.13.8 | scala | mature | Scalameta |
| LLVM IR | 15 | llvmir | beta | ANTLR 4 |
| Scheme | ? | scheme | legacy | JavaCC |
| EMF Metamodel | 2.25.0 | emf | beta | EMF |
| EMF Model | 2.25.0 | emf-model | alpha | EMF |
| SCXML | 1.0 | scxml | alpha | XML |
| Text (naive, use with caution) | - | text | legacy | CoreNLP |
| Multi-Language | - | multi | alpha | - |
You need Java SE 25 to run or build JPlag.
JPlag is released on Maven Central, it can be included as follows:
<dependency>
<groupId>de.jplag</groupId>
<artifactId>jplag</artifactId>
<version></version>
</dependency>mvn clean package from the repository root to compile and build all submodules.
Run mvn clean package assembly:single instead if you need the full jar, which includes all dependencies.
Run mvn -P with-report-viewer clean package assembly:single to build the full jar with the report viewer. In this case, you'll need Node.js installed.jplag-x.y.z-jar-with-dependencies.jar) in the subdirectory cli/target.JPlag can either be used via the CLI or directly via its Java API. For more information, see the usage information in the wiki. If you are using the CLI, the report viewer UI will launch automatically. No data will leave your computer!
Note that the legacy CLI is varying slightly.
The language can either be set with the -l parameter or as a subcommand (jplag [jplag options] -l <language name> [language options]). A subcommand takes priority over the -l option.
Language-specific arguments can be set when using the subcommand. A list of language-specific options can be obtained by requesting the help page of a subcommand (e.g., jplag java —h).
…The new API makes it easy to integrate JPlag's plagiarism detection into external Java projects:
…We're happy to incorporate all improvements to JPlag into this codebase. Feel free to fork the project and send pull requests. Please consider our guidelines for contributions.
If you encounter bugs or other issues, please report them here. For other purposes, you can contact us at [email protected]. We would love to hear about your research related to JPlag. Feel free to contact us!
No open issues yet, or sync has not completed.