[Libreoffice-commits] core.git: Branch 'libreoffice-5-1' - 2 commits - bean/BUCK bean/com bean/pom.officebean.xml bin/mvn.py BUCK .buckconfig .buckversion .gitignore javaunohelper/BUCK javaunohelper/pom.juh.xml jurt/BUCK jurt/pom.jurt.xml ridljar/BUCK ridljar/pom.ridl.xml ridljar/pom.unoloader.xml ridljar/source solenv/bin solenv/buck solenv/maven unoil/BUCK unoil/pom.unoil.xml

David Ostrovsky david at ostrovsky.org
Fri Dec 18 16:28:15 PST 2015


 .buckconfig                                         |   13 
 .buckversion                                        |    1 
 .gitignore                                          |    2 
 BUCK                                                |   59 +++
 bean/BUCK                                           |   23 +
 bean/com/sun/star/comp/beans/LocalOfficeWindow.java |    2 
 bean/com/sun/star/comp/beans/OOoBean.java           |   24 -
 bean/pom.officebean.xml                             |   44 ++
 bin/mvn.py                                          |   60 ---
 javaunohelper/BUCK                                  |   20 +
 javaunohelper/pom.juh.xml                           |   44 ++
 jurt/BUCK                                           |   21 +
 jurt/pom.jurt.xml                                   |   44 ++
 ridljar/BUCK                                        |   20 +
 ridljar/pom.ridl.xml                                |   44 ++
 ridljar/pom.unoloader.xml                           |   44 ++
 ridljar/source/unoloader/BUCK                       |   20 +
 solenv/bin/version.py                               |   49 ++
 solenv/buck/build.defs                              |   49 ++
 solenv/maven/BUCK                                   |   41 ++
 solenv/maven/README.md                              |  373 ++++++++++++++++++++
 solenv/maven/VERSION                                |    7 
 solenv/maven/mvn.py                                 |   77 ++++
 solenv/maven/package.defs                           |   28 +
 unoil/BUCK                                          |   21 +
 unoil/pom.unoil.xml                                 |   44 ++
 26 files changed, 1100 insertions(+), 74 deletions(-)

New commits:
commit 756e103214c3c74c2af7e0da836b568259f81226
Author: David Ostrovsky <david at ostrovsky.org>
Date:   Tue Dec 1 23:59:11 2015 +0100

    Add build toolchain to upload LibreOffice API to Maven Central
    
    Set up the toolchain to create sources and javadocs artifacts in
    addition to JARs created during the build. Use Buck build tool for
    that: [1]. This is a fork of Google's build tool Blaze, created by
    Xooglers at Facebook. This build tool (like Blaze itself) uses
    Python to write build files.
    
    Add needed tools and build files to install LibreOffice API artifacts
    to local Maven repository or deploy them to Maven Central.
    
    To build all needed artifacts LibreOffice must be built regularly
    with GNU make first. To build the rest of the API (sources and
    javadocs):
    
      $> buck build api
    
    To replace version number with upcoming release version:
    
      $> solenv/bin/version.py 5.1.0
    
    To install the API to local Maven repository:
    
      $> buck build api_install
    
    To deploy the API to Maven Central:
    
      $> buck build api_deploy
    
    Detailed documentation is added to document the prerequisites and
    the workflow to upload LibreOffice API to Maven Central.
    
    * [1] https://buckbuild.com
    
    Change-Id: Ibdd552a01110836703bc069abe829b9921491cac
    Reviewed-on: https://gerrit.libreoffice.org/20343
    Reviewed-by: Thorsten Behrens <Thorsten.Behrens at CIB.de>
    Tested-by: Thorsten Behrens <Thorsten.Behrens at CIB.de>
    (cherry picked from commit 1fd41f43eb73c373cb94d32d82c5fb7a7e243367)

diff --git a/.buckconfig b/.buckconfig
new file mode 100644
index 0000000..5fa3abc
--- /dev/null
+++ b/.buckconfig
@@ -0,0 +1,13 @@
+[alias]
+  api = //:api
+  api_install = //solenv/maven:api_install
+  api_deploy = //solenv/maven:api_deploy
+
+[buildfile]
+  includes = //solenv/buck/build.defs
+
+[project]
+  ignore = .git,workdir,instdir
+
+[cache]
+  mode = dir
diff --git a/.buckversion b/.buckversion
new file mode 100644
index 0000000..3c60745
--- /dev/null
+++ b/.buckversion
@@ -0,0 +1 @@
+6659a474fb2ba6e921bb38c1b55d4c9ba6073cfa
diff --git a/.gitignore b/.gitignore
index 7999ec4..f9b6e90 100644
--- a/.gitignore
+++ b/.gitignore
@@ -20,6 +20,7 @@
 #
 
 # where stuff is built
+/buck-out
 /instdir
 /instdir_for_build
 /workdir
@@ -75,6 +76,7 @@
 \#*
 *.kdev4
 .kdev_include_paths
+.buckd
 .directory
 
 # things below this point are targeted for elimination
diff --git a/BUCK b/BUCK
new file mode 100644
index 0000000..66b0dbd
--- /dev/null
+++ b/BUCK
@@ -0,0 +1,59 @@
+prebuilt_jar(
+  name = 'juh',
+  binary_jar = 'instdir/program/classes/juh.jar',
+  visibility = ['PUBLIC'],
+)
+
+prebuilt_jar(
+  name = 'jurt',
+  binary_jar = 'instdir/program/classes/jurt.jar',
+  visibility = ['PUBLIC'],
+)
+
+prebuilt_jar(
+  name = 'officebean',
+  binary_jar = 'instdir/program/classes/officebean.jar',
+  visibility = ['PUBLIC'],
+)
+
+prebuilt_jar(
+  name = 'ridl',
+  binary_jar = 'instdir/program/classes/ridl.jar',
+  visibility = ['PUBLIC'],
+)
+
+prebuilt_jar(
+  name = 'unoil',
+  binary_jar = 'instdir/program/classes/unoil.jar',
+  visibility = ['PUBLIC'],
+)
+
+prebuilt_jar(
+  name = 'unoloader',
+  binary_jar = 'instdir/program/classes/unoloader.jar',
+  visibility = ['PUBLIC'],
+)
+
+zip_file(
+  name = 'api',
+  srcs = [
+   ':juh',
+   '//javaunohelper:juh-src',
+   '//javaunohelper:juh-javadoc',
+   ':jurt',
+   '//jurt:jurt-src',
+   '//jurt:jurt-javadoc',
+   ':officebean',
+   '//bean:officebean-src',
+   '//bean:officebean-javadoc',
+   ':ridl',
+   '//ridljar:ridl-src',
+   '//ridljar:ridl-javadoc',
+   ':unoil',
+   '//unoil:unoil-src',
+   '//unoil:unoil-javadoc',
+   ':unoloader',
+   '//ridljar/source/unoloader:unoloader-src',
+   '//ridljar/source/unoloader:unoloader-javadoc',
+  ]
+)
diff --git a/bean/BUCK b/bean/BUCK
new file mode 100644
index 0000000..94a235b
--- /dev/null
+++ b/bean/BUCK
@@ -0,0 +1,23 @@
+
+java_sources(
+  name = 'officebean-src',
+  srcs = glob(['com/**']),
+  visibility = ['PUBLIC'],
+)
+
+java_doc(
+  name = 'officebean-javadoc',
+  title = 'LibreOffice API',
+  pkgs = [
+    'com.sun.star.comp.beans',
+  ],
+  paths = ['.'],
+  srcs = glob(['com/**']),
+  deps = [
+    '//:juh',
+    '//:officebean',
+    '//:unoil',
+    '//:ridl',
+  ],
+  visibility = ['PUBLIC'],
+)
diff --git a/bean/com/sun/star/comp/beans/LocalOfficeWindow.java b/bean/com/sun/star/comp/beans/LocalOfficeWindow.java
index 1fc5768..5d18036 100644
--- a/bean/com/sun/star/comp/beans/LocalOfficeWindow.java
+++ b/bean/com/sun/star/comp/beans/LocalOfficeWindow.java
@@ -79,7 +79,7 @@ public class LocalOfficeWindow
      * Receives a notification about the connection has been closed.
      * This method has to set the connection to <code>null</code>.
      *
-     * @source The event object.
+     * @param source The event object.
      */
     public void disposing(EventObject source)
     {
diff --git a/bean/com/sun/star/comp/beans/OOoBean.java b/bean/com/sun/star/comp/beans/OOoBean.java
index 9400695..4d49de8 100644
--- a/bean/com/sun/star/comp/beans/OOoBean.java
+++ b/bean/com/sun/star/comp/beans/OOoBean.java
@@ -23,11 +23,9 @@ import com.sun.star.uno.UnoRuntime;
 // @requirement FUNC.PERF.LRN/0.6
 // @requirement FUNC.PERF.LOC/0.6
 // @requirement FUNC.PERF.FIX/0.6
+// @requirement FUNC.RES.OTH/0.2
+// No other resources are needed yet.
 /** This is the basic JavaBean for all OOo application modules.
-
-    @requirement FUNC.RES.OTH/0.2
-        No other resources are needed yet.
-
     @since OOo 2.0.0
  */
 public class OOoBean
@@ -80,7 +78,8 @@ public class OOoBean
     }
 
     // @requirement FUNC.PER/0.2
-    /** @internal
+    // @internal
+    /**
      */
     @Deprecated
     public void writeExternal( java.io.ObjectOutput aObjOut )
@@ -89,7 +88,8 @@ public class OOoBean
     }
 
     // @requirement FUNC.PER/0.2
-    /** @internal
+    // @internal
+    /**
      */
     @Deprecated
     public void readExternal( java.io.ObjectInput aObjIn )
@@ -155,9 +155,8 @@ public class OOoBean
         nOOoCheckCycle = nMilliSecs;
     }
 
+    // @internal
     /** Sets a connection to an OOo instance.
-
-        @internal
      */
     private synchronized void setOOoConnection(OfficeConnection iNewConnection)
             throws HasConnectionException, NoConnectionException {
@@ -927,7 +926,7 @@ public class OOoBean
     /** returns the <type scope="com::sun::star::frame">Frame</a>
         of the bean.
 
-        @returns
+        @return
             a Java class which implements all interfaces which the service
         <type scope="com::sun::star::frame">Frame</a> implements.
         Thus, methods can be called directly without queryInterface.
@@ -950,7 +949,7 @@ public class OOoBean
        // @requirement API.SIM.SEAP/0.2
     /** returns the <type scope="com::sun::star::frame::Controller"> of the bean.
 
-        @returns
+        @return
             a Java class which implements all interfaces which the service
         <type scope="com::sun::star::frame">Controller</a> implements.
         Thus, methods can be called directly without queryInterface.
@@ -978,7 +977,7 @@ public class OOoBean
        /** returns the <type scope="com::sun::star::document::OfficeDocument">
         of the bean.
 
-        @returns
+        @return
             a Java class which implements all interfaces which the service
         <type scope="com::sun::star::document">OfficeDocument</a>
         implements.
@@ -1362,10 +1361,9 @@ xLayoutManager.showElement("private:resource/menubar/menubar");
 
     // Helper Classes
 
-
+    // @internal
     /** Helper class to listen on the connection to learn when it dies.
 
-        @internal
      */
     private class EventListener
         extends Thread
diff --git a/javaunohelper/BUCK b/javaunohelper/BUCK
new file mode 100644
index 0000000..7f1120d
--- /dev/null
+++ b/javaunohelper/BUCK
@@ -0,0 +1,20 @@
+
+java_sources(
+  name = 'juh-src',
+  srcs = glob(['com/**']),
+  visibility = ['PUBLIC'],
+)
+
+java_doc(
+  name = 'juh-javadoc',
+  title = 'LibreOffice Makes it easier to use UNO with Java',
+  pkgs = [
+    'com.sun.star',
+  ],
+  paths = ['.'],
+  srcs = glob(['com/**']),
+  deps = [
+    '//:juh',
+  ],
+  visibility = ['PUBLIC'],
+)
diff --git a/jurt/BUCK b/jurt/BUCK
new file mode 100644
index 0000000..f2349aa
--- /dev/null
+++ b/jurt/BUCK
@@ -0,0 +1,21 @@
+
+java_sources(
+  name = 'jurt-src',
+  srcs = glob(['com/**']),
+  visibility = ['PUBLIC'],
+)
+
+java_doc(
+  name = 'jurt-javadoc',
+  title = 'LibreOffice Java Uno Runtime',
+  pkgs = [
+    'com.sun.star',
+  ],
+  paths = ['.'],
+  srcs = glob(['com/**']),
+  deps = [
+    '//:jurt',
+    '//:unoloader',
+  ],
+  visibility = ['PUBLIC'],
+)
diff --git a/ridljar/BUCK b/ridljar/BUCK
new file mode 100644
index 0000000..382287d
--- /dev/null
+++ b/ridljar/BUCK
@@ -0,0 +1,20 @@
+
+java_sources(
+  name = 'ridl-src',
+  srcs = glob(['com/**']),
+  visibility = ['PUBLIC'],
+)
+
+java_doc(
+  name = 'ridl-javadoc',
+  title = 'LibreOffice types for the Java Uno typesystem',
+  pkgs = [
+    'com.sun.star',
+  ],
+  paths = ['.'],
+  srcs = glob(['com/**']),
+  deps = [
+    '//:ridl',
+  ],
+  visibility = ['PUBLIC'],
+)
diff --git a/ridljar/source/unoloader/BUCK b/ridljar/source/unoloader/BUCK
new file mode 100644
index 0000000..2678130
--- /dev/null
+++ b/ridljar/source/unoloader/BUCK
@@ -0,0 +1,20 @@
+
+java_sources(
+  name = 'unoloader-src',
+  srcs = glob(['com/**']),
+  visibility = ['PUBLIC'],
+)
+
+java_doc(
+  name = 'unoloader-javadoc',
+  title = 'LibreOffice Uno loader',
+  pkgs = [
+    'com.sun.star.lib.unoloader',
+  ],
+  paths = ['.'],
+  srcs = glob(['com/**']),
+  deps = [
+    '//:ridl',
+  ],
+  visibility = ['PUBLIC'],
+)
diff --git a/solenv/bin/version.py b/solenv/bin/version.py
new file mode 100755
index 0000000..18c0441
--- /dev/null
+++ b/solenv/bin/version.py
@@ -0,0 +1,49 @@
+#!/usr/bin/env python
+
+from __future__ import print_function
+from optparse import OptionParser
+import os.path
+import re
+import sys
+
+M = {
+  'juh': 'javaunohelper',
+  'jurt': 'jurt',
+  'officebean': 'bean',
+  'ridl': 'ridljar',
+  'unoil': 'unoil',
+  'unoloader': 'ridljar',
+}
+
+parser = OptionParser()
+_, args = parser.parse_args()
+
+if not len(args):
+  parser.error('not enough arguments')
+elif len(args) > 1:
+  parser.error('too many arguments')
+
+DEST = r'\g<1>%s\g<3>' % args[0]
+
+
+def replace_in_file(filename, src_pattern):
+  try:
+    f = open(filename, "r")
+    s = f.read()
+    f.close()
+    s = re.sub(src_pattern, DEST, s)
+    f = open(filename, "w")
+    f.write(s)
+    f.close()
+  except IOError as err:
+    print('error updating %s: %s' % (filename, err), file=sys.stderr)
+
+src_pattern = re.compile(r'^(\s*<version>)([-.@\w]+)(</version>\s*)$',
+                         re.MULTILINE)
+
+for a in ['juh', 'jurt', 'officebean', 'ridl', 'unoil', 'unoloader']:
+  replace_in_file(os.path.join(M[a], 'pom.%s.xml' % a), src_pattern)
+
+src_pattern = re.compile(r"^(LIBREOFFICE_VERSION = ')([-.@\w]+)(')$",
+                         re.MULTILINE)
+replace_in_file('solenv/maven/VERSION', src_pattern)
diff --git a/solenv/buck/build.defs b/solenv/buck/build.defs
new file mode 100644
index 0000000..b7b81ec
--- /dev/null
+++ b/solenv/buck/build.defs
@@ -0,0 +1,49 @@
+def java_sources(
+    name,
+    srcs,
+    visibility = []
+  ):
+  java_library(
+    name = name,
+    resources = srcs,
+    visibility = visibility,
+  )
+
+def java_doc(
+    name,
+    title,
+    pkgs,
+    paths,
+    srcs = [],
+    deps = [],
+    visibility = [],
+    do_it_wrong = False,
+  ):
+  if do_it_wrong:
+    sourcepath = paths
+  else:
+    sourcepath = ['$SRCDIR/' + n for n in paths]
+  genrule(
+    name = name,
+    cmd = ' '.join([
+      'while ! test -f .buckconfig; do cd ..; done;',
+      'javadoc',
+      '-quiet',
+      '-protected',
+      '-encoding UTF-8',
+      '-charset UTF-8',
+      '-notimestamp',
+      '-windowtitle "' + title + '"',
+      '-link http://docs.oracle.com/javase/7/docs/api',
+      '-subpackages ',
+      ':'.join(pkgs),
+      '-sourcepath ',
+      ':'.join(sourcepath),
+      ' -classpath ',
+      ':'.join(['$(location %s)' % n for n in deps]),
+      '-d $TMP',
+    ]) + ';jar cf $OUT -C $TMP .',
+    srcs = srcs,
+    out = name + '.jar',
+    visibility = visibility,
+)
diff --git a/solenv/maven/BUCK b/solenv/maven/BUCK
new file mode 100644
index 0000000..f5bca38
--- /dev/null
+++ b/solenv/maven/BUCK
@@ -0,0 +1,41 @@
+include_defs('//solenv/maven/VERSION')
+include_defs('//solenv/maven/package.defs')
+
+URL = 'https://oss.sonatype.org/content/repositories/snapshots' \
+    if LIBREOFFICE_VERSION.endswith('-SNAPSHOT') else \
+        'https://oss.sonatype.org/service/local/staging/deploy/maven2'
+
+maven_package(
+  repository = 'sonatype-nexus-staging',
+  url = URL,
+  version = LIBREOFFICE_VERSION,
+  jar = {
+    'juh': '//:juh',
+    'jurt': '//:jurt',
+    'officebean': '//:officebean',
+    'ridl': '//:ridl',
+    'unoil': '//:unoil',
+    'unoloader': '//:unoloader',
+  },
+  src = {
+    'juh': '//javaunohelper:juh-src',
+    'jurt': '//jurt:jurt-src',
+    'officebean': '//bean:officebean-src',
+    'ridl': '//ridljar:ridl-src',
+    'unoil': '//unoil:unoil-src',
+    'unoloader': '//ridljar/source/unoloader:unoloader-src',
+  },
+  doc = {
+    'juh': '//javaunohelper:juh-javadoc',
+    'jurt': '//jurt:jurt-javadoc',
+    'officebean': '//bean:officebean-javadoc',
+    'ridl': '//ridljar:ridl-javadoc',
+    'unoil': '//unoil:unoil-javadoc',
+    'unoloader': '//ridljar/source/unoloader:unoloader-javadoc',
+  },
+)
+
+python_binary(
+  name = 'mvn',
+  main = 'mvn.py',
+)
diff --git a/solenv/maven/README.md b/solenv/maven/README.md
new file mode 100644
index 0000000..6294568
--- /dev/null
+++ b/solenv/maven/README.md
@@ -0,0 +1,373 @@
+= Uploading LibreOffice API to Maven Central
+
+This file documents the prerequisites and workflow to upload LibreOffice
+API to Maven Central or local Maven repository.
+
+To install LibreOffice API to local Maven repository or deploy the API
+to the Maven Central, extra build toolchain is required.
+
+`Ant` is used to bootstrap `Buck` build tool. `Buck` build tool is used to
+build sources and javadocs for the API and install or deploy the artifacts
+to Maven repository. `Maven` commands are invoked for that from within
+`Buck` driven build. To be able to upload the API to Maven Central, access
+must be granted to LibreOffice project on OSSRH.
+
+
+== Buck
+
+`Buck` is new build tool that uses Python to write build files. It is
+maintained by Facebook and is available under Apache 2 license.
+
+
+=== Installing Buck
+
+There is currently no binary distribution of `Buck`, so it has to be manually
+built and installed. Apache Ant and gcc are required.
+
+Clone the git and build it:
+
+----
+  git clone https://github.com/facebook/buck
+  cd buck
+  ant
+----
+
+If you don't have a `bin/` directory in your home directory, create one:
+
+----
+  mkdir ~/bin
+----
+
+Add the `~/bin` folder to the path:
+
+----
+  PATH=~/bin:$PATH
+----
+
+Note that the buck executable needs to be available in all shell sessions,
+so also make sure it is appended to the path globally.
+
+Add a symbolic link in `~/bin` to the buck and buckd executables:
+
+----
+  ln -s `pwd`/bin/buck ~/bin/
+  ln -s `pwd`/bin/buckd ~/bin/
+----
+
+Verify that `buck` is accessible:
+
+----
+  which buck
+----
+
+To enable autocompletion of buck commands, install the autocompletion
+script from `./scripts/buck_completion.bash` in the buck project.  Refer
+to the script's header comments for installation instructions.
+
+
+=== Prerequisites
+
+Buck requires Python version 2.7 to be installed. The Maven download toolchain
+requires `curl` to be installed.
+
+
+=== Using Buck daemon
+
+Buck ships with a daemon command `buckd`, which uses the
+link:https://github.com/martylamb/nailgun[Nailgun] protocol for running
+Java programs from the command line without incurring the JVM startup
+overhead.
+
+Using a Buck daemon can save significant amounts of time as it avoids the
+overhead of starting a Java virtual machine, loading the buck class files
+and parsing the build files for each command.
+
+It is safe to run several buck daemons started from different project
+directories and they will not interfere with each other. Buck's documentation
+covers daemon in http://facebook.github.io/buck/command/buckd.html[buckd].
+
+To use `buckd` the additional
+link:https://facebook.github.io/watchman[watchman] program must be installed.
+
+To disable `buckd`, the environment variable `NO_BUCKD` must be set. It's not
+recommended to put it in the shell config, as it can be forgotten about it and
+then assumed Buck was working as it should when it should be using buckd.
+Prepend the variable to Buck invocation instead:
+
+----
+  NO_BUCKD=1 buck build api
+----
+
+
+=== Installing watchman
+
+Watchman is used internally by Buck to monitor directory trees and is needed
+for buck daemon to work properly. Because buckd is activated by default in the
+latest version of Buck, it searches for the watchman executable in the
+path and issues a warning when it is not found and kills buckd.
+
+To prepare watchman installation on Linux:
+
+----
+  git clone https://github.com/facebook/watchman.git
+  cd watchman
+  ./autogen.sh
+----
+
+To install it in user home directory (without root privileges):
+
+----
+  ./configure --prefix $HOME/watchman
+  make install
+----
+
+To install it system wide:
+
+----
+  ./configure
+  make
+  sudo make install
+----
+
+Put $HOME/watchman/bin/watchman in path or link to $HOME/bin/watchman.
+
+To install watchman on OS X:
+
+----
+  brew install --HEAD watchman
+----
+
+See the original documentation for more information:
+link:https://facebook.github.io/watchman/docs/install.html[Watchman
+installation].
+
+
+=== Override Buck's settings
+
+Additional JVM args for Buck can be set in `.buckjavaargs` in the
+project root directory. For example to override Buck's default 1GB
+heap size:
+
+----
+  cat > .buckjavaargs <<EOF
+  -XX:MaxPermSize=512m -Xms8000m -Xmx16000m
+  EOF
+----
+
+
+== Preparations to publish LibreOffice API to Maven Central
+
+
+=== Deploy Configuration settings for Maven Central
+
+
+To be able to publish artifacts to Maven Central some preparations must
+be done:
+
+* Create an account on
+link:https://issues.sonatype.org/secure/Signup!default.jspa[Sonatype's Jira].
+
+Sonatype is the company that runs Maven Central and you need a Sonatype
+account to be able to upload artifacts to Maven Central.
+
+* Configure your Sonatype user and password in `~/.m2/settings.xml`:
+
+----
+<server>
+  <id>sonatype-nexus-staging</id>
+  <username>USER</username>
+  <password>PASSWORD</password>
+</server>
+----
+
+* Request permissions to upload artifacts to the `org.libreoffice`
+repository on Maven Central:
+
+Ask for this permission by adding a comment on the
+link:https://issues.sonatype.org/browse/OSSRH-19129[OSSRH-19129] Jira
+ticket at Sonatype.
+
+The request needs to be approved by someone who already has this
+permission by commenting on the same issue.
+
+* Generate and publish a PGP key
+
+Generate and publish a PGP key as described in
+link:http://central.sonatype.org/pages/working-with-pgp-signatures.html[
+Working with PGP Signatures].
+
+Please be aware that after publishing your public key it may take a
+while until it is visible to the Sonatype server.
+
+The PGP key is needed to be able to sign the artifacts before the
+upload to Maven Central.
+
+The PGP passphrase can be put in `~/.m2/settings.xml`:
+
+----
+<settings>
+  <profiles>
+    <profile>
+      <id>gpg</id>
+      <properties>
+        <gpg.executable>gpg2</gpg.executable>
+        <gpg.passphrase>mypassphrase</gpg.passphrase>
+      </properties>
+    </profile>
+  </profiles>
+  <activeProfiles>
+    <activeProfile>gpg</activeProfile>
+  </activeProfiles>
+</settings>
+----
+
+It can also be included in the key chain on OS X.
+
+
+== Update Versions
+
+Before publishing new artifacts to Maven Central, `LIBREOFFICE_VERSION`
+in the `VERSION` file must be updated, e.g. change it from `5.0.0` to `5.1.0`.
+
+In addition the version must be updated in a number of pom.xml files.
+
+To do this run the `./solenv/bin/version.py` script and provide the new
+version as parameter, e.g.:
+
+----
+  ./solenv/bin/version.py 5.1.0
+----
+
+
+== Build LibreOffice
+
+Build LibreOffice as usually, so that API JARs are created.
+
+
+== Publish the LibreOffice artifacts to local Maven repository
+
+Execute this command to install LibreOffice API to local Maven repository:
+
+----
+  buck build api_install
+----
+
+Once executed, he local Maven respoitory contains the LibreOffice API
+artifacts:
+
+----
+  $ ls -1 ~/.m2/repository/org/libreoffice/unoil/5.1.0/
+  _maven.repositories
+  unoil-5.1.0.jar
+  unoil-5.1.0-javadoc.jar
+  unoil-5.1.0.pom
+  unoil-5.1.0-sources.jar
+----
+
+
+== Publish the LibreOffice artifacts to Maven Central
+
+* Make sure you have done the configuration for deploying to Maven Central.
+* Make sure that the version is updated in the `VERSION` file and in
+the `pom.xml` files as described above.
+
+Push the API to Maven Central:
+
+----
+  buck build api_deploy
+----
+
+For troubleshooting, the environment variable `VERBOSE` can be set. This
+prints out the commands that are executed by the Buck build process:
+
+----
+  VERBOSE=1 buck build api_deploy
+----
+
+If no artifacts are uploaded, clean the `buck-out` folder and retry:
+
+----
+  rm -rf buck-out
+----
+
+* To where the artifacts are uploaded depends on the `LIBREOFFICE_VERSION`
+in the `VERSION` file:
+
+** SNAPSHOT versions are directly uploaded into the Sonatype snapshots
+repository and no further action is needed:
+
+https://oss.sonatype.org/content/repositories/snapshots/org/libreoffice/
+
+** Release versions are uploaded into a staging repository in the
+link:https://oss.sonatype.org/[Sonatype Nexus Server].
+
+* Verify the staging repository
+
+** Go to the link:https://oss.sonatype.org/[Sonatype Nexus Server] and
+sign in with your Sonatype credentials.
+
+** Click on 'Build Promotion' in the left navigation bar under
+'Staging Repositories' and find the `orglibreoffice-XXXX` staging
+repository.
+
+** Verify its content
+
+While the staging repository is open you can upload further content and
+also replace uploaded artifacts. If something is wrong with the staging
+repository you can drop it by selecting it and clicking on `Drop`.
+
+** Run Sonatype validations on the staging repository
+
+Select the staging repository and click on `Close`. This runs the
+Sonatype validations on the staging repository. The repository will
+only be closed if everything is OK. A closed repository cannot be
+modified anymore, but you may still drop it if you find any issues.
+
+** Test closed staging repository
+
+Once a repository is closed you can find the URL to it in the `Summary`
+section, e.g. https://oss.sonatype.org/content/repositories/orglibreoffice-4711
+
+Use this URL for further testing of the artifacts in this repository,
+e.g. to try building a extension against this API in this repository
+update the version in the `pom.xml` and configure the repository:
+
+----
+  <repositories>
+    <repository>
+      <id>mexus-staging-repository</id>
+      <url>https://oss.sonatype.org/content/repositories/orglibreoffice-4711</url>
+    </repository>
+  </repositories>
+----
+
+* Release the staging repository
+
+How to release a staging repository is described in the
+link:https://docs.sonatype.org/display/Repository/Sonatype+OSS+Maven+Repository+Usage+Guide#SonatypeOSSMavenRepositoryUsageGuide-8.a.2.ReleasingaStagingRepository[
+Sonatype OSS Maven Repository Usage Guide].
+
+[WARNING]
+Releasing artifacts to Maven Central cannot be undone!
+
+** Find the closed staging repository in the
+link:https://oss.sonatype.org/[Sonatype Nexus Server], select it and
+click on `Release`.
+
+** The released artifacts are available in
+https://oss.sonatype.org/content/repositories/releases/org/libreoffice/
+
+** It may take up to 2 hours until the artifacts appear on Maven
+Central:
+
+http://central.maven.org/maven2/org/libreoffice/
+
+* [optional]: View download statistics
+
+** Sign in to the
+link:https://oss.sonatype.org/[Sonatype Nexus Server].
+
+** Click on 'Views/Repositories' in the left navigation bar under
+'Central Statistics'.
+
+** Select `org.libreoffice` as `Project`.
diff --git a/solenv/maven/VERSION b/solenv/maven/VERSION
new file mode 100644
index 0000000..c99b63d
--- /dev/null
+++ b/solenv/maven/VERSION
@@ -0,0 +1,7 @@
+# Maven style API version (e.g. '2.x-SNAPSHOT').
+#
+# Used by :install and :deploy when talking to the destination repository. As
+# we currently have no stable releases, we use the "build number" scheme
+# described at:
+# http://mojo.codehaus.org/versions-maven-plugin/version-rules.html
+LIBREOFFICE_VERSION = '@version@'
diff --git a/bin/mvn.py b/solenv/maven/mvn.py
similarity index 53%
rename from bin/mvn.py
rename to solenv/maven/mvn.py
index d5a1c9a..caa15ee 100755
--- a/bin/mvn.py
+++ b/solenv/maven/mvn.py
@@ -7,19 +7,25 @@
 
 from __future__ import print_function
 from optparse import OptionParser
-from os import path
+from os import path, environ
+from subprocess import check_output
 from sys import stderr
-try:
-  from subprocess import check_output
-except ImportError:
-  from subprocess import Popen, PIPE
-  def check_output(*cmd):
-    return Popen(*cmd, stdout=PIPE).communicate()[0]
+
+M = {
+  'juh': 'javaunohelper',
+  'jurt': 'jurt',
+  'officebean': 'bean',
+  'ridl': 'ridljar',
+  'unoil': 'unoil',
+  'unoloader': 'ridljar',
+}
+
 opts = OptionParser()
 opts.add_option('--repository', help='maven repository id')
 opts.add_option('--url', help='maven repository url')
+opts.add_option('-o')
 opts.add_option('-a', help='action (valid actions are: install,deploy)')
-opts.add_option('-v', help='libreoffice version')
+opts.add_option('-v', help='gerrit version')
 opts.add_option('-s', action='append', help='triplet of artifactId:type:path')
 
 args, ctx = opts.parse_args()
@@ -27,34 +33,45 @@ if not args.v:
   print('version is empty', file=stderr)
   exit(1)
 
-common = [
-  '-DgroupId=org.libreoffice',
-  '-Dversion=%s' % args.v,
-]
-
-self = path.dirname(path.abspath(__file__))
-mvn = ['mvn', '--file', path.join(self, 'fake_pom.xml')]
+root = path.abspath(__file__)
+while not path.exists(path.join(root, '.buckconfig')):
+  root = path.dirname(root)
 
 if 'install' == args.a:
-  cmd = mvn + ['install:install-file'] + common
+  cmd = [
+    'mvn',
+    'install:install-file',
+    '-Dversion=%s' % args.v,
+  ]
 elif 'deploy' == args.a:
-  cmd = mvn + [
-    'deploy:deploy-file',
+  cmd = [
+    'mvn',
+    'gpg:sign-and-deploy-file',
     '-DrepositoryId=%s' % args.repository,
     '-Durl=%s' % args.url,
-  ] + common
+  ]
 else:
   print("unknown action -a %s" % args.a, file=stderr)
   exit(1)
 
 for spec in args.s:
   artifact, packaging_type, src = spec.split(':')
+  exe = cmd + [
+    '-DpomFile=%s' % path.join(root, '%s/pom.%s.xml' % (M[artifact], artifact)),
+    '-Dpackaging=%s' % packaging_type,
+    '-Dfile=%s' % src,
+  ]
   try:
-    check_output(cmd + [
-      '-DartifactId=%s' % artifact,
-      '-Dpackaging=%s' % packaging_type,
-      '-Dfile=%s' % src,
-    ])
+    if environ.get('VERBOSE'):
+      print(' '.join(exe), file=stderr)
+    check_output(exe)
   except Exception as e:
     print('%s command failed: %s' % (args.a, e), file=stderr)
     exit(1)
+
+with open(args.o, 'w') as fd:
+  if args.repository:
+    print('Repository: %s' % args.repository, file=fd)
+  if args.url:
+    print('URL: %s' % args.url, file=fd)
+  print('Version: %s' % args.v, file=fd)
diff --git a/solenv/maven/package.defs b/solenv/maven/package.defs
new file mode 100644
index 0000000..2c67d8f
--- /dev/null
+++ b/solenv/maven/package.defs
@@ -0,0 +1,28 @@
+def maven_package(
+    version,
+    repository = None,
+    url = None,
+    jar = {},
+    src = {},
+    doc = {}):
+  cmd = ['$(exe //solenv/maven:mvn)', '-v', version, '-o', '$OUT']
+  api_cmd = []
+  for type,d in [('jar', jar), ('java-source', src), ('javadoc', doc)]:
+    for a,t in d.iteritems():
+      api_cmd.append('-s %s:%s:$(location %s)' % (a,type,t))
+
+  genrule(
+    name = 'api_install',
+    cmd = ' '.join(cmd + api_cmd + ['-a', 'install']),
+    out = 'api_install.info',
+  )
+
+  if repository and url:
+    genrule(
+      name = 'api_deploy',
+      cmd = ' '.join(cmd + api_cmd + [
+        '-a', 'deploy',
+        '--repository', repository,
+        '--url', url]),
+      out = 'api_deploy.info',
+    )
diff --git a/unoil/BUCK b/unoil/BUCK
new file mode 100644
index 0000000..e84663c
--- /dev/null
+++ b/unoil/BUCK
@@ -0,0 +1,21 @@
+genrule(
+  name = 'unoil-src',
+  cmd = ' && '.join([
+    'cd $TMP',
+    'echo "FAKE SOURCE ARCHIVE" > README',
+    'zip -qr $OUT *',
+  ]),
+  out = 'unoil-src.jar',
+  visibility = ['PUBLIC'],
+)
+
+genrule(
+  name = 'unoil-javadoc',
+  cmd = ' && '.join([
+    'cd $TMP',
+    'echo "FAKE JAVADOC ARCHIVE" > README',
+    'zip -qr $OUT *',
+  ]),
+  out = 'unoil-javadoc.jar',
+  visibility = ['PUBLIC'],
+)
commit 5b4649a118c599d356542d2ef3f87d634980ad55
Author: David Ostrovsky <david at ostrovsky.org>
Date:   Tue Dec 1 00:20:09 2015 +0100

    Expose metadata to deploy LibreOffice artifacts on Maven Central
    
    As outlined in the requirements to deploy the artifacts on Maven
    Central, the metdata must be provided:
    
    * Project Name, Description and URL
    * License Information
    * Developer Information
    * SCM Information
    
    [1] http://central.sonatype.org/pages/requirements.html
    
    Change-Id: I0bcd19a22d0e1a48f0faec0b414f816f7da5b318
    Reviewed-on: https://gerrit.libreoffice.org/20315
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Thorsten Behrens <Thorsten.Behrens at CIB.de>
    (cherry picked from commit 9ca2de8c5995657973665189903aa2eebe0ef69a)

diff --git a/bean/pom.officebean.xml b/bean/pom.officebean.xml
new file mode 100644
index 0000000..8d366d2
--- /dev/null
+++ b/bean/pom.officebean.xml
@@ -0,0 +1,44 @@
+<project>
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.libreoffice</groupId>
+  <artifactId>officebean</artifactId>
+  <version>@version@</version>
+  <packaging>jar</packaging>
+  <name>LibreOffice - LOKit4Java</name>
+  <description>LOKit4Java</description>
+  <url>https://www.libreoffice.org</url>
+
+  <licenses>
+    <license>
+      <name>Mozilla Public License, Version 2.0</name>
+      <url>https://www.mozilla.org/en-US/MPL/2.0</url>
+      <distribution>repo</distribution>
+    </license>
+  </licenses>
+
+  <scm>
+    <url>http://cgit.freedesktop.org/libreoffice/core</url>
+    <connection>https://gerrit.libreoffice.org/#/admin/projects/core</connection>
+  </scm>
+
+  <developers>
+    <developer>
+      <name>The Document Foundation</name>
+    </developer>
+  </developers>
+
+  <mailingLists>
+    <mailingList>
+      <name>LibreOffice Development Mailing List</name>
+      <post>libreoffice at lists.freedesktop.org</post>
+      <subscribe>http://lists.freedesktop.org/mailman/listinfo/libreoffice</subscribe>
+      <unsubscribe>http://lists.freedesktop.org/mailman/listinfo/libreoffice</unsubscribe>
+      <archive>http://lists.freedesktop.org/archives/libreoffice</archive>
+    </mailingList>
+  </mailingLists>
+
+  <issueManagement>
+    <url>https://bugs.documentfoundation.org</url>
+    <system>LibreOffice Issue Tracker</system>
+  </issueManagement>
+</project>
diff --git a/javaunohelper/pom.juh.xml b/javaunohelper/pom.juh.xml
new file mode 100644
index 0000000..f132ead
--- /dev/null
+++ b/javaunohelper/pom.juh.xml
@@ -0,0 +1,44 @@
+<project>
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.libreoffice</groupId>
+  <artifactId>juh</artifactId>
+  <version>@version@</version>
+  <packaging>jar</packaging>
+  <name>LibreOffice - Java UNO helper</name>
+  <description>Java UNO helper</description>
+  <url>https://www.libreoffice.org</url>
+
+  <licenses>
+    <license>
+      <name>Mozilla Public License, Version 2.0</name>
+      <url>https://www.mozilla.org/en-US/MPL/2.0</url>
+      <distribution>repo</distribution>
+    </license>
+  </licenses>
+
+  <scm>
+    <url>http://cgit.freedesktop.org/libreoffice/core</url>
+    <connection>https://gerrit.libreoffice.org/#/admin/projects/core</connection>
+  </scm>
+
+  <developers>
+    <developer>
+      <name>The Document Foundation</name>
+    </developer>
+  </developers>
+
+  <mailingLists>
+    <mailingList>
+      <name>LibreOffice Development Mailing List</name>
+      <post>libreoffice at lists.freedesktop.org</post>
+      <subscribe>http://lists.freedesktop.org/mailman/listinfo/libreoffice</subscribe>
+      <unsubscribe>http://lists.freedesktop.org/mailman/listinfo/libreoffice</unsubscribe>
+      <archive>http://lists.freedesktop.org/archives/libreoffice</archive>
+    </mailingList>
+  </mailingLists>
+
+  <issueManagement>
+    <url>https://bugs.documentfoundation.org</url>
+    <system>LibreOffice Issue Tracker</system>
+  </issueManagement>
+</project>
diff --git a/jurt/pom.jurt.xml b/jurt/pom.jurt.xml
new file mode 100644
index 0000000..25e3403
--- /dev/null
+++ b/jurt/pom.jurt.xml
@@ -0,0 +1,44 @@
+<project>
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.libreoffice</groupId>
+  <artifactId>jurt</artifactId>
+  <version>@version@</version>
+  <packaging>jar</packaging>
+  <name>LibreOffice - Java Uno Runtime</name>
+  <description>Java Uno Runtime</description>
+  <url>https://www.libreoffice.org</url>
+
+  <licenses>
+    <license>
+      <name>Mozilla Public License, Version 2.0</name>
+      <url>https://www.mozilla.org/en-US/MPL/2.0</url>
+      <distribution>repo</distribution>
+    </license>
+  </licenses>
+
+  <scm>
+    <url>http://cgit.freedesktop.org/libreoffice/core</url>
+    <connection>https://gerrit.libreoffice.org/#/admin/projects/core</connection>
+  </scm>
+
+  <developers>
+    <developer>
+      <name>The Document Foundation</name>
+    </developer>
+  </developers>
+
+  <mailingLists>
+    <mailingList>
+      <name>LibreOffice Development Mailing List</name>
+      <post>libreoffice at lists.freedesktop.org</post>
+      <subscribe>http://lists.freedesktop.org/mailman/listinfo/libreoffice</subscribe>
+      <unsubscribe>http://lists.freedesktop.org/mailman/listinfo/libreoffice</unsubscribe>
+      <archive>http://lists.freedesktop.org/archives/libreoffice</archive>
+    </mailingList>
+  </mailingLists>
+
+  <issueManagement>
+    <url>https://bugs.documentfoundation.org</url>
+    <system>LibreOffice Issue Tracker</system>
+  </issueManagement>
+</project>
diff --git a/ridljar/pom.ridl.xml b/ridljar/pom.ridl.xml
new file mode 100644
index 0000000..96b862a0
--- /dev/null
+++ b/ridljar/pom.ridl.xml
@@ -0,0 +1,44 @@
+<project>
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.libreoffice</groupId>
+  <artifactId>ridl</artifactId>
+  <version>@version@</version>
+  <packaging>jar</packaging>
+  <name>LibreOffice - Types for the Java Uno typesystem</name>
+  <description>Types for the Java Uno typesystem</description>
+  <url>https://www.libreoffice.org</url>
+
+  <licenses>
+    <license>
+      <name>Mozilla Public License, Version 2.0</name>
+      <url>https://www.mozilla.org/en-US/MPL/2.0</url>
+      <distribution>repo</distribution>
+    </license>
+  </licenses>
+
+  <scm>
+    <url>http://cgit.freedesktop.org/libreoffice/core</url>
+    <connection>https://gerrit.libreoffice.org/#/admin/projects/core</connection>
+  </scm>
+
+  <developers>
+    <developer>
+      <name>The Document Foundation</name>
+    </developer>
+  </developers>
+
+  <mailingLists>
+    <mailingList>
+      <name>LibreOffice Development Mailing List</name>
+      <post>libreoffice at lists.freedesktop.org</post>
+      <subscribe>http://lists.freedesktop.org/mailman/listinfo/libreoffice</subscribe>
+      <unsubscribe>http://lists.freedesktop.org/mailman/listinfo/libreoffice</unsubscribe>
+      <archive>http://lists.freedesktop.org/archives/libreoffice</archive>
+    </mailingList>
+  </mailingLists>
+
+  <issueManagement>
+    <url>https://bugs.documentfoundation.org</url>
+    <system>LibreOffice Issue Tracker</system>
+  </issueManagement>
+</project>
diff --git a/ridljar/pom.unoloader.xml b/ridljar/pom.unoloader.xml
new file mode 100644
index 0000000..188a041
--- /dev/null
+++ b/ridljar/pom.unoloader.xml
@@ -0,0 +1,44 @@
+<project>
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.libreoffice</groupId>
+  <artifactId>unoloader</artifactId>
+  <version>@version@</version>
+  <packaging>jar</packaging>
+  <name>LibreOffice - UNO loader</name>
+  <description>UNO loader</description>
+  <url>https://www.libreoffice.org</url>
+
+  <licenses>
+    <license>
+      <name>Mozilla Public License, Version 2.0</name>
+      <url>https://www.mozilla.org/en-US/MPL/2.0</url>
+      <distribution>repo</distribution>
+    </license>
+  </licenses>
+
+  <scm>
+    <url>http://cgit.freedesktop.org/libreoffice/core</url>
+    <connection>https://gerrit.libreoffice.org/#/admin/projects/core</connection>
+  </scm>
+
+  <developers>
+    <developer>
+      <name>The Document Foundation</name>
+    </developer>
+  </developers>
+
+  <mailingLists>
+    <mailingList>
+      <name>LibreOffice Development Mailing List</name>
+      <post>libreoffice at lists.freedesktop.org</post>
+      <subscribe>http://lists.freedesktop.org/mailman/listinfo/libreoffice</subscribe>
+      <unsubscribe>http://lists.freedesktop.org/mailman/listinfo/libreoffice</unsubscribe>
+      <archive>http://lists.freedesktop.org/archives/libreoffice</archive>
+    </mailingList>
+  </mailingLists>
+
+  <issueManagement>
+    <url>https://bugs.documentfoundation.org</url>
+    <system>LibreOffice Issue Tracker</system>
+  </issueManagement>
+</project>
diff --git a/unoil/pom.unoil.xml b/unoil/pom.unoil.xml
new file mode 100644
index 0000000..356d25d
--- /dev/null
+++ b/unoil/pom.unoil.xml
@@ -0,0 +1,44 @@
+<project>
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.libreoffice</groupId>
+  <artifactId>unoil</artifactId>
+  <version>@version@</version>
+  <packaging>jar</packaging>
+  <name>LibreOffice - Maps IDL into java classes definitions</name>
+  <description>Maps IDL into java classes definitions</description>
+  <url>https://www.libreoffice.org</url>
+
+  <licenses>
+    <license>
+      <name>Mozilla Public License, Version 2.0</name>
+      <url>https://www.mozilla.org/en-US/MPL/2.0</url>
+      <distribution>repo</distribution>
+    </license>
+  </licenses>
+
+  <scm>
+    <url>http://cgit.freedesktop.org/libreoffice/core</url>
+    <connection>https://gerrit.libreoffice.org/#/admin/projects/core</connection>
+  </scm>
+
+  <developers>
+    <developer>
+      <name>The Document Foundation</name>
+    </developer>
+  </developers>
+
+  <mailingLists>
+    <mailingList>
+      <name>LibreOffice Development Mailing List</name>
+      <post>libreoffice at lists.freedesktop.org</post>
+      <subscribe>http://lists.freedesktop.org/mailman/listinfo/libreoffice</subscribe>
+      <unsubscribe>http://lists.freedesktop.org/mailman/listinfo/libreoffice</unsubscribe>
+      <archive>http://lists.freedesktop.org/archives/libreoffice</archive>
+    </mailingList>
+  </mailingLists>
+
+  <issueManagement>
+    <url>https://bugs.documentfoundation.org</url>
+    <system>LibreOffice Issue Tracker</system>
+  </issueManagement>
+</project>


More information about the Libreoffice-commits mailing list