You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+2-2Lines changed: 2 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -59,15 +59,15 @@ Please see our [Installation Guide](https://docs.jabref.org/installation).
59
59
60
60
We are thankful for any bug reports or other feedback.
61
61
If you have ideas for new features you want to be included in JabRef, tell us in [the feature section](http://discourse.jabref.org/c/features) of our forum!
62
-
If you need support in using JabRef, please read [the documentation](https://docs.jabref.org/) first, the [frequently asked questions (FAQ)](https://docs.jabref.org/faq) and also have a look at our [community forum](https://discourse.jabref.org/c/help/7).
62
+
If you need support in using JabRef, please read the [user documentation](https://docs.jabref.org/), especially the [frequently asked questions (FAQ)](https://docs.jabref.org/faq) and also take a look at our [community forum](https://discourse.jabref.org/c/help/7).
63
63
You can use our [GitHub issue tracker](https://github.com/JabRef/jabref/issues) to file bug reports.
64
64
65
65
An explanation of donation possibilities and usage of donations is available at our [donations page](https://donations.jabref.org).
66
66
67
67
## Contributing
68
68
69
69
Want to be part of a free and open-source project that tens of thousands of researchers use every day?
70
-
Please have a look at our [guidelines for contributing](CONTRIBUTING.md).
70
+
Please take a look at our [guidelines for contributing](CONTRIBUTING.md).
Passing command line arguments using gradle is currently not possible as all arguments (such as `-Dfile.encoding=windows-1252`) are passed to the application.
13
+
14
+
Without [jlink](https://docs.oracle.com/en/java/javase/11/tools/jlink.html), it is not possible to generate a fat jar anymore. During development, the capabilities of the IDE has to be used.
Copy file name to clipboardExpand all lines: docs/code-howtos/faq.md
+11Lines changed: 11 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -5,6 +5,11 @@ parent: Code Howtos
5
5
6
6
Following is a list of common errors encountered by developers which lead to failing tests, with their common solutions:
7
7
8
+
## git hints
9
+
10
+
* Sync your fork with the JabRef repository: [General howto by GitHub](https://help.github.com/articles/syncing-a-fork/)
11
+
* Branches and pull requests (🇩🇪): [https://github.com/unibas-marcelluethi/software-engineering/blob/master/docs/week2/exercises/practical-exercises.md](https://github.com/unibas-marcelluethi/software-engineering/blob/master/docs/week2/exercises/practical-exercises.md)
12
+
8
13
## Failing tests
9
14
10
15
### Failing <b>Checkstyle</b> tests
@@ -149,4 +154,10 @@ And similarly for `csl-locales` or `abbrv.jabref.org`.
149
154
150
155
To avoid this, avoid staging using `git add .` from CLI. Preferably use a GUI-based git manager, such as the one built in IntelliJ or open git gui from the command line. Even if you accidentally stage them, don't commit all files, selectively commit the files you touched using the GUI based tool, and push.
151
156
157
+
## Q: I get `java: package org.jabref.logic.journals does not exist`
158
+
159
+
A: You have to ignore `buildSrc/src/main` as source directory in IntelliJ as indicated in our [setup guide](https://devdocs.jabref.org/getting-into-the-code/guidelines-for-setting-up-a-local-workspace).
160
+
161
+
Also filed as IntelliJ issue [IDEA-240250](https://youtrack.jetbrains.com/issue/IDEA-240250).
Copy file name to clipboardExpand all lines: docs/index.md
+71-25Lines changed: 71 additions & 25 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -5,53 +5,99 @@ layout: home
5
5
# Overview on Developing JabRef
6
6
7
7
This page presents all development information around JabRef.
8
-
In case you are a end user, please head to the [user documentation](https://docs.jabref.org) or to the [general homepage](https://www.jabref.org) of JabRef.
8
+
In case you are an end user, please head to the [user documentation](https://docs.jabref.org) or to the [general homepage](https://www.jabref.org) of JabRef.
9
9
10
10
## Starting point for new developers
11
11
12
12
On the page [Setting up a local workspace](https://devdocs.jabref.org/getting-into-the-code/guidelines-for-setting-up-a-local-workspace), we wrote about the initial steps to get your IDE running.
13
-
We strongly recommend to continue reading there.
13
+
We strongly recommend continuing reading there.
14
14
After you successfully cloned and build JabRef, you are invited to continue reading here.
15
15
16
-
## How tos
16
+
## JabRef's development strategy
17
17
18
-
* External: [Sync your fork with the JabRef repository](https://help.github.com/articles/syncing-a-fork/)
19
-
* External (🇩🇪): Branches and pull requests: [https://github.com/unibas-marcelluethi/software-engineering/blob/master/docs/week2/exercises/practical-exercises.md](https://github.com/unibas-marcelluethi/software-engineering/blob/master/docs/week2/exercises/practical-exercises.md)
18
+
We aim to keep up to high-quality code standards and use code quality tools wherever possible.
20
19
21
-
## Teaching Exercises
20
+
To ensure high code-quality,
22
21
23
-
We are very happy that JabRef is part of [Software Engineering](https://en.wikipedia.org/wiki/Software_engineering) trainings. Please head to [Teaching](teaching.md) for more information on using JabRef as a teaching object and on previous courses where JabRef was used.
22
+
* We follow the principles of [Java by Comparison](https://java.by-comparison.com).
23
+
* We follow the principles of [Effective Java](https://www.oreilly.com/library/view/effective-java-3rd/9780134686097/).
24
+
* We use [Design Patterns](https://java-design-patterns.com/patterns/) when applicable.
25
+
* We document our design decisions using the lightweight architectural decision records [MADR](https://adr.github.io/madr/).
26
+
* Each external pull request is reviewed by at least two [JabRef Core Developers](https://github.com/JabRef/jabref/blob/main/MAINTAINERS).
24
27
25
-
## Miscellaneous Hints
28
+
## Continuous integration
26
29
27
-
### Command Line
30
+
JabRef has automatic checks using [GitHub actions](https://github.com/features/actions) in place.
31
+
One of them is checking for proper formatting of the code.
32
+
Consistent formatting ensures easier reading of the code.
33
+
Thus, we ensure that all of JabRef's code follows the same code style.
28
34
29
-
The package `org.jabref.cli` is responsible for handling the command line options.
35
+
Binaries are created using [gradle](https://gradle.org).
36
+
In case of an internal pull request, they are uploaded to <https://builds.jabref.org>.
37
+
These binaries are created without any checks to have them available as quickly as possible, even if the localization or some fetchers are broken.
38
+
You can fnd the deployment workflow runs at: <https://github.com/JabRef/jabref/actions?workflow=Deployment>.
30
39
31
-
During development, one can configure IntelliJ to pass command line parameters:
The [main](https://github.com/JabRef/jabref/tree/main) branch is the main development line ("trunk") and is intended to incorporate fixes and improvements as soon as possible and to move JabRef forward to modern technologies such as the latest Java version.
34
43
35
-
Passing command line arguments using gradle is currently not possible as all arguments (such as `-Dfile.encoding=windows-1252`) are passed to the application.
44
+
Other branches are used for working on and discussing improvements with the help of [pull requests](https://github.com/JabRef/jabref/pulls). One can see the binaries of each branch at [https://builds.jabref.org/](https://builds.jabref.org). Releases mark milestones and are based on the `main` branch at that point in time.
36
45
37
-
Without jlink, it is not possible to generate a fat jar any more. During development, the capabilities of the IDE has to be used.
46
+
## How JabRef acquires contributors
38
47
39
-
### Groups
48
+
* We participate in [Hacktoberfest](https://www.hacktoberfest.com).
49
+
* We participate in [Google Summer of Code](https://developers.google.com/open-source/gsoc/).
50
+
* We are very happy that JabRef is part of [Software Engineering](https://en.wikipedia.org/wiki/Software_engineering) trainings.
51
+
Please head to [Teaching](teaching.md) for more information on using JabRef as a teaching object and on previous courses where JabRef was used.
40
52
41
-
Diagram showing aspects of groups: [Groups.uml](https://github.com/JabRef/jabref/tree/3b3716b1e05a0d3273c886e102a8efe5e96472e0/docs/Groups.uml).
53
+
## High-level architecture
42
54
43
-
## Architectural Decision Records
55
+
In JabRef's code structure,
44
56
45
-
[Architectural decisions for JabRef](https://devdocs.jabref.org/decisions/) are recorded.
57
+
The `model` package encompasses the most important data structures (`BibDatases`, `BibEntries`, `Events`, and related aspects) and has minimal logic attached.
58
+
The `logic` package is responsible for business logic such as reading/writing/importing/exporting and manipulating the `model`, and it is structured often as an API the `gui` can call and use.
59
+
Only the `gui` knows the user and their preferences and can interact with them to help them solving tasks.
60
+
For each layer, we form packages according to their responsibility, i.e., vertical structuring.
61
+
The `model` classes should have no dependencies to other classes of JabRef and the `logic` classes should only depend on `model` classes.
62
+
The `cli` package bundles classes that are responsible for JabRef's command line interface.
63
+
The `preferences` package represents all information customizable by a user for their personal needs.
46
64
47
-
For new ADRs, please use [adr-template.md](https://github.com/JabRef/jabref/blob/main/docs/decisions/adr-template.md) as basis.
48
-
More information on MADR is available at <https://adr.github.io/madr/>.
49
-
General information about architectural decision records is available at <https://adr.github.io/>.
65
+
We use an event bus to publish events from the `model` to the other layers.
66
+
This allows us to keep the architecture but still react upon changes within the core in the outer layers.
67
+
Note that we are currently switching to JavaFX's observables, as we aim for a stronger coupling to the data producers.
68
+
69
+
### Package Structure
70
+
71
+
Permitted dependencies in our architecture are:
72
+
73
+
```monospaced
74
+
gui --> logic --> model
75
+
gui ------------> model
76
+
gui ------------> preferences
77
+
gui ------------> cli
78
+
gui ------------> global classes
79
+
80
+
logic ------------> model
50
81
51
-
## FAQ
82
+
global classes ------------> everywhere
52
83
53
-
* Q: I get `java: package org.jabref.logic.journals does not exist`.
84
+
cli ------------> model
85
+
cli ------------> logic
86
+
cli ------------> global classes
87
+
cli ------------> preferences
88
+
```
54
89
55
-
A: You have to ignore `buildSrc/src/main` as source directory in IntelliJ as indicated in our [setup guide](https://devdocs.jabref.org/getting-into-the-code/guidelines-for-setting-up-a-local-workspace).
90
+
All packages and classes which are currently not part of these packages (we are still in the process of structuring) are considered as gui classes from a dependency standpoint.
56
91
57
-
Also filed as IntelliJ issue [IDEA-240250](https://youtrack.jetbrains.com/issue/IDEA-240250).
92
+
### Most Important Classes and their Relation
93
+
94
+
Both GUI and CLI are started via the `JabRefMain` which, in turn, calls `JabRef` which then decides whether the GUI (`JabRefFrame`) or the CLI (`JabRefCLI` and a lot of code in `JabRef`) will be started. The `JabRefFrame` represents the Window which contains a `SidePane` on the left used for the fetchers/groups. Each tab is a `BasePanel` which has a `SearchBar` at the top, a `MainTable` at the center and a `PreviewPanel` or an `EntryEditor` at the bottom. Any right click on the `MainTable` is handled by the `RightClickMenu`. Each `BasePanel` holds a `BibDatabaseContext` consisting of a `BibDatabase` and the `MetaData` (which is relevant data of the currently focussed database). A `BibDatabase` has a list of `BibEntries`. Each `BibEntry` has an ID, a citation key and a key/value store for the fields with their values. Interpreted data (such as the type or the file field) is stored in the `TypedBibentry` type. The user can change the `JabRefPreferences` through the `PreferencesDialog`.
95
+
96
+
## Architectural Decision Records
97
+
98
+
JabRef collects core architecture decisions using "Architectural Decision Records".
99
+
They are available at <https://devdocs.jabref.org/decisions/>.
100
+
101
+
For new ADRs, please use [adr-template.md](https://github.com/JabRef/jabref/blob/main/docs/decisions/adr-template.md) as basis.
102
+
More information on MADR is available at <https://adr.github.io/madr/>.
103
+
General information about architectural decision records is available at <https://adr.github.io/>.
0 commit comments