# JPlag - Detecting Software Plagiarism
[](https://github.com/jplag/jplag/actions/workflows/maven.yml)
[](https://github.com/jplag/jplag/releases/latest)
[](https://github.com/jplag/jplag/blob/master/LICENSE)
## Download and Installation
### Downloading a release
* Download a [released version](https://github.com/jplag/jplag/releases).
* In case you depend on the legacy version of JPlag we refer to the [legacy release v2.12.1](https://github.com/jplag/jplag/releases/tag/v2.12.1-SNAPSHOT) and the [legacy branch](https://github.com/jplag/jplag/tree/legacy).
### Building from sources
1. Download or clone the code from this repository.
2. Run `mvn clean install` from the root of the repository to install all submodules. You will find the JARs in the respective `target` directories.
3. Inside the `jplag` directory run `mvn clean generate-sources package`.
You will find the generated JAR with all dependencies in `jplag/target`.
## Usage
JPlag can either be used via the CLI or directly via its Java API. For more information, see the [usage information in the wiki](https://github.com/jplag/JPlag/wiki/1.-How-to-Use-JPlag).
### CLI
*Note that the [legacy CLI](https://github.com/jplag/jplag/blob/legacy/README.md) is varying slightly.*
```
JPlag - Detecting Software Plagiarism
Usage: JPlag [ options ] []
The root-directory that contains all submissions
named arguments:
-h, --help show this help message and exit
-l {java1,java2,java5,java5dm,java7,java9,python3,cpp,csharp,char,text,scheme} Select the language to parse the submissions (Standard: java9)
-bc BC Name of the subdirectory of the root directory which contains the base code (common framework used in all submissions)
-v {quiet,long} Verbosity of the logging (Standard: quiet)
-d Debug parser. Non-parsable files will be stored (Standard: false)
-S S Look in directories /*/ for programs
-p P comma-separated list of all filename suffixes that are included
-x X All files named in this file will be ignored in the comparison (line-separated list)
-t T Tunes the comparison sensitivity by adjusting the minimum token required to be counted as a matching section. A smaller increases the sensitivity but might lead to more false-positives
-m M Match similarity threshold [0-100]: All matches above this threshold will be saved (Standard: 0.0)
-n N The maximum number of comparisons that will be shown in the generated report, if set to -1 all comparisons will be shown (Standard: 30)
-r R Name of the directory in which the comparison results will be stored (Standard: result)
-c {normal,parallel} Comparison mode used to compare the programs (Standard: normal)
```
### Java API
The new API makes it easy to integrate JPlag's plagiarism detection into external Java projects:
```java
JPlagOptions options = new JPlagOptions("/path/to/rootDir", LanguageOption.JAVA_1_9);
options.setBaseCodeSubmissionName("template");
JPlag jplag = new JPlag(options);
JPlagResult result = jplag.run();
List comparisons = result.getComparisons();
// Optional
File outputDir = new File("/path/to/output");
Report report = new Report(outputDir);
report.writeResult(result);
```
## Contributing
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](https://github.com/jplag/JPlag/wiki/2.-Contributing-to-JPlag).
## Contact
If you encounter bugs or other issues, please report them [here](https://github.com/jplag/jplag/issues).
For other purposes, you can contact us at jplag@ipd.kit.edu .
If you are doing research related to JPlag, we would love to know what you are doing. Feel free to contact us!
### More information can be found in our [Wiki](https://github.com/jplag/JPlag/wiki)!