{"action":"created","issue":{"url":"https://api.github.com/repos/eXist-db/exist/issues/736","labels_url":"https://api.github.com/repos/eXist-db/exist/issues/736/labels{/name}","comments_url":"https://api.github.com/repos/eXist-db/exist/issues/736/comments","events_url":"https://api.github.com/repos/eXist-db/exist/issues/736/events","html_url":"https://github.com/eXist-db/exist/issues/736","id":95423297,"number":736,"title":"Switch from Ant to a Maven build system","user":{"login":"adamretter","id":1264057,"avatar_url":"https://avatars.githubusercontent.com/u/1264057?v=3","gravatar_id":"","url":"https://api.github.com/users/adamretter","html_url":"https://github.com/adamretter","followers_url":"https://api.github.com/users/adamretter/followers","following_url":"https://api.github.com/users/adamretter/following{/other_user}","gists_url":"https://api.github.com/users/adamretter/gists{/gist_id}","starred_url":"https://api.github.com/users/adamretter/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/adamretter/subscriptions","organizations_url":"https://api.github.com/users/adamretter/orgs","repos_url":"https://api.github.com/users/adamretter/repos","events_url":"https://api.github.com/users/adamretter/events{/privacy}","received_events_url":"https://api.github.com/users/adamretter/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/eXist-db/exist/labels/enhancement","name":"enhancement","color":"84b6eb"},{"url":"https://api.github.com/repos/eXist-db/exist/labels/in%20progress","name":"in progress","color":"006b75"}],"state":"open","locked":false,"assignee":{"login":"adamretter","id":1264057,"avatar_url":"https://avatars.githubusercontent.com/u/1264057?v=3","gravatar_id":"","url":"https://api.github.com/users/adamretter","html_url":"https://github.com/adamretter","followers_url":"https://api.github.com/users/adamretter/followers","following_url":"https://api.github.com/users/adamretter/following{/other_user}","gists_url":"https://api.github.com/users/adamretter/gists{/gist_id}","starred_url":"https://api.github.com/users/adamretter/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/adamretter/subscriptions","organizations_url":"https://api.github.com/users/adamretter/orgs","repos_url":"https://api.github.com/users/adamretter/repos","events_url":"https://api.github.com/users/adamretter/events{/privacy}","received_events_url":"https://api.github.com/users/adamretter/received_events","type":"User","site_admin":false},"milestone":{"url":"https://api.github.com/repos/eXist-db/exist/milestones/4","html_url":"https://github.com/eXist-db/exist/milestones/eXist%203.1","labels_url":"https://api.github.com/repos/eXist-db/exist/milestones/4/labels","id":1049340,"number":4,"title":"eXist 3.1","description":"","creator":{"login":"adamretter","id":1264057,"avatar_url":"https://avatars.githubusercontent.com/u/1264057?v=3","gravatar_id":"","url":"https://api.github.com/users/adamretter","html_url":"https://github.com/adamretter","followers_url":"https://api.github.com/users/adamretter/followers","following_url":"https://api.github.com/users/adamretter/following{/other_user}","gists_url":"https://api.github.com/users/adamretter/gists{/gist_id}","starred_url":"https://api.github.com/users/adamretter/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/adamretter/subscriptions","organizations_url":"https://api.github.com/users/adamretter/orgs","repos_url":"https://api.github.com/users/adamretter/repos","events_url":"https://api.github.com/users/adamretter/events{/privacy}","received_events_url":"https://api.github.com/users/adamretter/received_events","type":"User","site_admin":false},"open_issues":22,"closed_issues":3,"state":"open","created_at":"2015-04-01T19:27:33Z","updated_at":"2015-07-16T12:29:24Z","due_on":null,"closed_at":null},"comments":2,"created_at":"2015-07-16T12:29:23Z","updated_at":"2015-07-16T13:57:12Z","closed_at":null,"body":"I want to switch eXist from the existing Ant and shell script build system to Maven. The advantages I see are this:\r\n\r\n1. A simple build process that is by convention\r\n  1 Currently with Ant it is very hard to determine what JUnit tests are included in which build targets and which tests are never executed.\r\n\r\n2. Easy management, resolution and update of dependencies.\r\n  1. No longer need to keep dependencies in SCM (Git)\r\n  2. Ability to detect unused and/or undeclared dependencies (`mvn dependency:analyze`)\r\n  3. Ability to check/report on outdated dependencies which can help with security advisories and bugfixes (`mvn versions:display-dependency-updates` and `mvn versions:display-plugin-updates`)\r\n\r\n3. Ability to publish Maven artifacts which is useful for users:\r\n  1. Embedding eXist in others apps\r\n  2. Building extensions for eXist (e.g. XARs that have a Java component)\r\n  3. With the correct build process, publishing to Maven Central can be as easy as `mvn release:prepare && mvn release:perform`.\r\n  4. Ability to publish Maven snapshots of nightly builds.\r\n\r\n4. Multiple targets\r\n  1. Ability to generate shell scripts for running eXist as part of the build\r\n  2. IzPack installer\r\n  3. Bin package with dependencies\r\n  4. Src package with/without dependencies\r\n  5 Javadoc package\r\n\r\n4. Ability to run tools easily across the code-base as part of the build\r\n  1. Ensure license headers are consistent (`mvn license:check` and `mvn license:format`)\r\n  2. Ability to detect and report license conflicts e.g. GPL components (`license-verifier:check` and `license-verifier:report`).\r\n  3. Ability to ensure coding standards (`mvn checkstyle:check`)\r\n  4. Static analysis reports and warning\r\n\r\n5. Auto code generation during build\r\n  1. Antlr for the XQuery parser\r\n  2. AspectJ for the Security annotations\r\n\r\n6. Modular build system\r\n  1. Just build/re-build the modules that you need during development and testing.\r\n  2. Each extension module can be its own Maven module complete with tests. At present with Ant we cannot add XQuery tests for extension modules without introducing a reverse dependency.\r\n\r\n7. Surefire for running the test suites and reporting which JUnit tests are actually run or not\r\n  1. Ability to split the test suite into unit tests and integration tests with separate targets for each, should lead to faster test feedback\r\n\r\nThe switch will require some minimal reorganising of some of the folders within the eXist repo, for example `src/org` -> `src/main/java/org`; When the PR for this is committed to the code-base users will need to merge/rebase their branches (and/or forked repo branches)."},"comment":{"url":"https://api.github.com/repos/eXist-db/exist/issues/comments/121964540","html_url":"https://github.com/eXist-db/exist/issues/736#issuecomment-121964540","issue_url":"https://api.github.com/repos/eXist-db/exist/issues/736","id":121964540,"user":{"login":"adamretter","id":1264057,"avatar_url":"https://avatars.githubusercontent.com/u/1264057?v=3","gravatar_id":"","url":"https://api.github.com/users/adamretter","html_url":"https://github.com/adamretter","followers_url":"https://api.github.com/users/adamretter/followers","following_url":"https://api.github.com/users/adamretter/following{/other_user}","gists_url":"https://api.github.com/users/adamretter/gists{/gist_id}","starred_url":"https://api.github.com/users/adamretter/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/adamretter/subscriptions","organizations_url":"https://api.github.com/users/adamretter/orgs","repos_url":"https://api.github.com/users/adamretter/repos","events_url":"https://api.github.com/users/adamretter/events{/privacy}","received_events_url":"https://api.github.com/users/adamretter/received_events","type":"User","site_admin":false},"created_at":"2015-07-16T13:57:12Z","updated_at":"2015-07-16T13:57:12Z","body":"@jensopetersen I opened a Doodle poll for gauging support, it is by invite, so I just invited you. If anyone else has a string opinion, please ask and I will also invite you."}}