You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@zookeeper.apache.org by GitBox <gi...@apache.org> on 2021/07/02 15:59:48 UTC

[GitHub] [zookeeper] bigmarvin edited a comment on pull request #1720: ZOOKEEPER-4331: add headers back

bigmarvin edited a comment on pull request #1720:
URL: https://github.com/apache/zookeeper/pull/1720#issuecomment-873100058


   Yes you are right, @ctubbsii, that it's also feasible to instruct jar plugin to plant these entries. That's the exact way how ant script does this job. However, I'd like to justify a little more around my preference for this change over the alternative you mentioned. I've tidied the header `Import-Package` and `Export-Package` to illustrate the justification below.
   
   The change of packaging from jar to bundle and the replacement of jar plugin with bundle plugin **only** modify the manifest, which makes such change very safe. This change would add some extra headers/entries that are not consumed in non-OSGi runtime, so the only cost would be some increment in size of delivered artifact. One step further, all artifacts of packaging jar can be turned into bundles safely, while I assume not every project has such requirement until it's widely adopted.
   
   The primary job of bundle plugin would be working out the **topology** of **versioned** packages, which is barely possible to mimic manually. The following parts require some knowledge in OSGi while I'll try to make it straightforward.
   
   As you can find in the `Export-Package`, if some client uses some classes in some zookeeper package (or formally some client bundle imports some zookeeper package) it must also import some other packages before the zookeeper classes can work or even just be loaded. This **topology** of dependency resides in the code base, so ideally those headers planted manually must be revisited for every code change. It would be too expensive if possible.
   
   Besides, all packages this artifact/bundle requires and provides are **versioned** if possible. The versions are extracted from the dependency tree at build time, so ideally all these versions must be revisited for every change in version or dependency tree. Putting these 2 ideal parts together, I would say it's practically impossible to manually maintain these headers/entries. Any such attempt would come up with some values that may work for some scenarios but never for all, and why bother given there's some automated way in place?
   
   I can prepare another change using jar plugin to plant headers/entries. At least, either solution works for ZOOKEEPER-4331. However, I'd like to double check how determined you maintainers are before I drop this preferred proposal. Looking forward to your input.
   
   ```
   Import-Package: \
     javax.management;resolution:=optional,\
     javax.security.auth.callback,\
     javax.security.auth.login,\
     javax.security.sasl,\
     org.slf4j;version="[1.7,2)",\
     io.netty.buffer;resolution:=optional;version="[4.1,5)",\
     io.netty.channel;resolution:=optional;version="[4.1,5)",\
     io.netty.channel.group;resolution:=optional;version="[4.1,5)",\
     io.netty.channel.socket.nio;resolution:=optional;version="[4.1,5)",\
     org.ietf.jgss,com.fasterxml.jackson.core;resolution:=optional;version="[2.10,3)",\
     com.fasterxml.jackson.databind;resolution:=optional;version="[2.10,3)",\
     io.netty.bootstrap;resolution:=optional;version="[4.1,5)",\
     io.netty.channel.epoll;resolution:=optional;version="[4.1,5)",\
     io.netty.channel.nio;resolution:=optional;version="[4.1,5)",\
     io.netty.channel.socket;resolution:=optional;version="[4.1,5)",\
     io.netty.handler.ssl;resolution:=optional;version="[4.1,5)",\
     io.netty.util;resolution:=optional;version="[4.1,5)",\
     io.netty.util.concurrent;resolution:=optional;version="[4.1,5)",\
     javax.crypto;resolution:=optional,\
     javax.crypto.spec;resolution:=optional,\
     javax.naming;resolution:=optional,\
     javax.naming.directory;resolution:=optional,\
     javax.naming.ldap;resolution:=optional,\
     javax.net.ssl;resolution:=optional,\
     javax.security.auth;resolution:=optional,\
     javax.security.auth.kerberos;resolution:=optional,\
     javax.security.auth.spi;resolution:=optional,\
     javax.security.auth.x500;resolution:=optional,\
     javax.servlet;resolution:=optional;version="[3.1,4)",\
     javax.servlet.http;resolution:=optional;version="[3.1,4)",\
     jline.console.completer;resolution:=optional;version="[2.14,3)",\
     org.apache.commons.cli;resolution:=optional;version="[1.2,2)",\
     org.apache.jute;resolution:=optional,\
     org.apache.yetus.audience;resolution:=optional,\
     org.apache.zookeeper;resolution:=optional,\
     org.apache.zookeeper.admin;resolution:=optional,\
     org.apache.zookeeper.cli;resolution:=optional,\
     org.apache.zookeeper.client;resolution:=optional,\
     org.apache.zookeeper.common;resolution:=optional,\
     org.apache.zookeeper.data;resolution:=optional,\
     org.apache.zookeeper.jmx;resolution:=optional,\
     org.apache.zookeeper.proto;resolution:=optional,\
     org.apache.zookeeper.server;resolution:=optional,\
     org.apache.zookeeper.server.admin;resolution:=optional,\
     org.apache.zookeeper.server.auth;resolution:=optional,\
     org.apache.zookeeper.server.command;resolution:=optional,\
     org.apache.zookeeper.server.persistence;resolution:=optional,\
     org.apache.zookeeper.server.quorum;resolution:=optional,\
     org.apache.zookeeper.server.quorum.auth;resolution:=optional,\
     org.apache.zookeeper.server.quorum.flexible;resolution:=optional,\
     org.apache.zookeeper.server.util;resolution:=optional,\
     org.apache.zookeeper.txn;resolution:=optional,\
     org.apache.zookeeper.util;resolution:=optional,\
     org.apache.zookeeper.version;resolution:=optional,\
     org.eclipse.jetty.security;resolution:=optional;version="[9.4,10)",\
     org.eclipse.jetty.server;resolution:=optional;version="[9.4,10)",\
     org.eclipse.jetty.servlet;resolution:=optional;version="[9.4,10)",\
     org.eclipse.jetty.util.security;resolution:=optional;version="[9.4,10)",\
     org.osgi.framework;resolution:=optional,\
     org.osgi.util.tracker;resolution:=optional
   Export-Package: \
     org.apache.zookeeper;uses:="javax.security.auth,javax.security.auth.callback,javax.security.auth.login,org.apache.jute,org.apache.yetus.audience,org.apache.zookeeper.cli,org.apache.zookeeper.client,org.apache.zookeeper.common,org.apache.zookeeper.data,org.apache.zookeeper.proto,org.apache.zookeeper.version,org.slf4j";version="3.5.9",\
     org.apache.zookeeper.admin;uses:="org.apache.yetus.audience,org.apache.zookeeper,org.apache.zookeeper.client,org.apache.zookeeper.data";version="3.5.9",\
     org.apache.zookeeper.cli;uses:="org.apache.commons.cli,org.apache.zookeeper,org.apache.zookeeper.data";version="3.5.9",\
     org.apache.zookeeper.client;uses:="javax.security.auth.login,javax.security.sasl,org.apache.yetus.audience,org.apache.zookeeper,org.apache.zookeeper.common,org.apache.zookeeper.data,org.apache.zookeeper.server.quorum,org.slf4j";version="3.5.9",\
     org.apache.zookeeper.common;uses:="io.netty.channel,io.netty.channel.socket,io.netty.handler.ssl,javax.net.ssl,org.apache.zookeeper.server.quorum,org.slf4j";version="3.5.9",\
     org.apache.zookeeper.data;uses:="org.apache.jute,org.apache.yetus.audience";version="3.5.9",\
     org.apache.zookeeper.jmx;uses:="javax.management";version="3.5.9",\
     org.apache.zookeeper.proto;uses:="org.apache.jute,org.apache.yetus.audience,org.apache.zookeeper.data";version="3.5.9",\
     org.apache.zookeeper.server;uses:="javax.security.sasl,org.apache.jute,org.apache.yetus.audience,org.apache.zookeeper,org.apache.zookeeper.data,org.apache.zookeeper.jmx,org.apache.zookeeper.proto,org.apache.zookeeper.server.admin,org.apache.zookeeper.server.auth,org.apache.zookeeper.server.persistence,org.apache.zookeeper.server.quorum,org.apache.zookeeper.server.quorum.flexible,org.apache.zookeeper.txn,org.slf4j";version="3.5.9",\
     org.apache.zookeeper.server.admin;uses:="org.apache.yetus.audience,org.apache.zookeeper.server";version="3.5.9",\
     org.apache.zookeeper.server.auth;uses:="javax.net.ssl,javax.security.auth,javax.security.auth.callback,javax.security.auth.login,javax.security.auth.spi,org.apache.zookeeper,org.apache.zookeeper.common,org.apache.zookeeper.server";version="3.5.9",\
     org.apache.zookeeper.server.command;uses:="org.apache.zookeeper.server";version="3.5.9",\
     org.apache.zookeeper.server.persistence;uses:="org.apache.jute,org.apache.yetus.audience,org.apache.zookeeper,org.apache.zookeeper.server,org.apache.zookeeper.txn";version="3.5.9",\
     org.apache.zookeeper.server.quorum;uses:="javax.net.ssl,javax.security.sasl,org.apache.jute,org.apache.yetus.audience,org.apache.zookeeper,org.apache.zookeeper.common,org.apache.zookeeper.data,org.apache.zookeeper.jmx,org.apache.zookeeper.server,org.apache.zookeeper.server.admin,org.apache.zookeeper.server.persistence,org.apache.zookeeper.server.quorum.auth,org.apache.zookeeper.server.quorum.flexible,org.apache.zookeeper.txn,org.slf4j";version="3.5.9",\
     org.apache.zookeeper.server.quorum.auth;uses:="javax.security.auth.callback,javax.security.auth.login,javax.security.sasl,org.apache.zookeeper.server.quorum";version="3.5.9",\
     org.apache.zookeeper.server.quorum.flexible;uses:="org.apache.zookeeper.server.quorum";version="3.5.9",\
     org.apache.zookeeper.server.util;uses:="org.apache.jute,org.apache.zookeeper.server,org.apache.zookeeper.server.quorum,org.apache.zookeeper.txn,org.slf4j";version="3.5.9",\
     org.apache.zookeeper.txn;uses:="org.apache.jute,org.apache.yetus.audience,org.apache.zookeeper.data";version="3.5.9",\
     org.apache.zookeeper.util;uses:="javax.security.auth,javax.security.auth.callback,javax.security.sasl,org.slf4j";version="3.5.9",org.apache.zookeeper.version;version="3.5.9",\
     org.apache.zookeeper.version.util;version="3.5.9"
   ```


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscribe@zookeeper.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org