= Developers Guide = [[PageOutline(2)]] This page explains how to create a patch, modify the core JOSM application or existing plugins. At least basic Java programming skills are necessary. See [WikiStart#Contribute WikiStart] how you could improve JOSM without Java skills. == Source code and JOSM builds == * [wiki:InstallNotes Installing and Running JOSM] * [[Source code#Getthesource]] * [[Source code#CompilingusingAnt]] * [wiki:DevelopersGuide/Compiling Compiling JOSM using IDE] * [wiki:DevelopersGuide/CreateBuild How to create a JOSM build] == Developer guidelines == * [wiki:DevelopersGuide/StyleGuide Development Guidelines] (Coding style and Internationalization) * [wiki:DevelopersGuide/DefaultPresets Default Presets] (about new osm-tags and icons in JOSM) * [wiki:DevelopersGuide/PatchGuide Patch Guidelines] (How to submit a patch) * [wiki:DevelopersGuide/Schedule Track the state of development] (Release Schedule) * [wiki:DevelopersGuide/Tickets Ticket system guidelines] * [wiki:DevelopersGuide/Releasing Releasing] * [wiki:Releases Releases] == IDEs == === Eclipse === * [wiki:DevelopersGuide/EclipseTips Various Eclipse tips] * [http://www.youtube.com/watch?v=-LoWGf-hqiQ Video: how to checkout JOSM into Eclipse] * [http://www.youtube.com/watch?v=Z3OjG3nDvzA Video: how to checkout a JOSM plugin into Eclipse] === IntelliJ IDEA === [[Image(intellij-logo.svg, right, 64px, link=https://www.jetbrains.com/idea/)]] Some developers [wiki:DevelopersGuide/CompilingUsingIntelliJ are using IntelliJ IDEA] for development. JetBrains supports open source projects by granting developers [https://www.jetbrains.com/buy/opensource/ free licenses]. === YourKit === {{{#!comment Do NOT remove the YourKit logo, this is required to get the free license, see https://lists.openstreetmap.org/pipermail/josm-dev/2018-June/008072.html }}} [[Image(yklogo.png, right, link=https://www.yourkit.com/java/profiler)]] JOSM core developers are using the [https://www.yourkit.com/java/profiler YourKit Java Profiler], as we found other tools lacking required functionality for profiling. YourKit supports open source projects by granting developers [https://www.yourkit.com/purchase/#os_license free licenses]. To enable the YourKit Java agent, add the following JVM parameter: {{{ -agentpath:/yjpagent.dll=delay=10000 }}} === VisualVM === VisualVM may be used to find memory leaks or generate heap dumps from a josm instance running concurrently. Heap dumps can be structurally examined. VisualVM organizes the dump data e.g. by number and type of objects, memory used and cpu time consumed in an explorable tree view. Heap dump and garbage collection of the target instance is requestable using button clicks. Be aware that the default configuration of the memory sampler will sample VisualVM generated objects as well, which may be confused as a memory leak. The memory profiler can be set to profile specific classes only, it tracks allocations once started. * [http://visualvm.github.io VisualVM] * [http://www.captaincasa.com/pdf/techdoc_memprofiling.pdf Step by step guide to memory profiling with VisualVM] If an autonomous instance of josm should be debuggable from within eclipse at the same time, command line parameters must be supplied to open a transport socket that the debugger can connect to: {{{ #!bash # run JOSM with remote debug options; connect a debugger to 127.0.0.1 and port 9988 java -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:9988,server=y,suspend=n -Xmx1200m -jar josm-latest.jar }}} This is not necessary if the internals of JOSM are to be explored by VisualVM exclusively. == JOSM core == * [/doc JavaDoc class documentation] * [[JavaBugs]] - you may encounter one of them == JOSM plugins == * [wiki:DevelopersGuide/DevelopingPlugins Develop Plugins] * [wiki:DevelopersGuide/DevelopingPlugins#Publishingthenewplugin Plugin publication steps] * [wiki:DevelopersGuide/PluginInstallationWithoutRestart Plugin installation without restart] == Misc == * SVN: [wiki:DevelopersGuide/SVN_Account How to use your JOSM SVN account] * Help: [wiki:/DevelopersGuide/HelpSystem/HelpTopicsList Current list of topics] as targets for the [wiki:/DevelopersGuide/HelpSystem Context-sensitive help] * Shortcuts: [wiki:/DevelopersGuide/ShortcutsList Current list of shortcut keys] * Translation: for [wiki:Translations program and Wiki] and [wiki:TaggingPresets#Translation Presets] * Sandbox: [osmwiki:Sandbox_for_editing OSM data sandbox] * Salt Formula: [https://github.com/saltstack-formulas/josm-formula] == Developers == Dirk Stöcker is currently the lead maintainer of JOSM. Developers of JOSM with SVN commit privileges active in the past several months include: ||=Trac username=||=Name=|| ||Don-vip || Vincent Privat || ||Klumbumbus || Stefan Volke || ||simon04 || Simon Legner || ||stoecker || Dirk Stöcker || ||wiktorn || Wiktor Niesiobędzki || ||Upliner || Upliner Mikhalych || ||GerdP || Gerd Petermann || Immanuel Scholz was the original creator of JOSM, and previous maintainers include Frederik Ramm. For previous developers see [source:/trunk/CONTRIBUTION CONTRIBUTION]. Many others have contributed through bug reports, patches, translations, and documentation work.