[ https://issues.apache.org/jira/browse/PHOENIX-2535?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15232376#comment-15232376 ]
Josh Elser commented on PHOENIX-2535: ------------------------------------- (sorry, this is getting long. Do we have reviewboard or something set up going forward?) {code} - <packaging>pom</packaging> + <packaging>jar</packaging> {code} {code} + <id>default-jar</id> + <phase>none</phase> + <goals/> {code} Why make this change in phoenix-assembly/pom.xml? It seems like you're just working around Maven wanting to create a jar then. If you set this to {{pom}}, AFAIUI, that should not be trying to create any JAR for the module. {code} diff --git a/phoenix-assembly/src/build/components/all-common-jars.xml b/phoenix-assembly/src/build/components/all-common-jars.xml index 960c3c9..f8c5abd 100644 --- a/phoenix-assembly/src/build/components/all-common-jars.xml +++ b/phoenix-assembly/src/build/components/all-common-jars.xml @@ -24,12 +24,17 @@ <!-- Add the client & mapreduce jars. Expects the client jar packaging phase to already be run, which is determined by specification order in the pom. --> <fileSet> - <directory>target</directory> + <directory>${project.basedir}/../phoenix-client/target</directory> <outputDirectory>/</outputDirectory> <includes> <include>phoenix-*-client.jar</include> + </includes> + </fileSet> + <fileSet> + <directory>${project.basedir}/../phoenix-server/target</directory> + <outputDirectory>/</outputDirectory> + <includes> <include>phoenix-*-server.jar</include> - <include>phoenix-*-mapreduce.jar</include> </includes> </fileSet> <fileSet> {code} Is there a reason why you aren't putting JARs generated by a module within that module's target/ directory? This is really confusing to see in practice "I built this module. Where the heck are the artifacts?" {code} + <relocation> + <pattern>com.codahale</pattern> + <shadedPattern>org.apache.phoenix.shaded.com.codahale</shadedPattern> + </relocation> + <relocation> + <pattern>com.fasterxml</pattern> + <shadedPattern>org.apache.phoenix.shaded.com.fasterxml</shadedPattern> + </relocation> {code} Might be a bit more concise to make a property instead of repeating the shaded relocation prefix. E.g. {{<shaded.location>org.apache.phoenix.shaded</shaded.location>}} and then {{<shadedPattern>$\{shaded.location\}.com.fasterxml</shadedPattern>}}. Is this more concise? {code} + <pluginManagement> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-shade-plugin</artifactId> + </plugin> + </plugins> + </pluginManagement> {code} This looks unnecessary. The maven-shade-plugin should already be defined in pluginManagement in {{/pom.xml}}. {code} + <dependencies> + <!-- Depend on all other internal projects --> + <dependency> + <groupId>org.apache.phoenix</groupId> + <artifactId>phoenix-core</artifactId> + </dependency> + <dependency> + <groupId>org.apache.phoenix</groupId> + <artifactId>phoenix-flume</artifactId> + </dependency> + <dependency> + <groupId>org.apache.phoenix</groupId> + <artifactId>phoenix-pig</artifactId> + </dependency> + <dependency> + <groupId>org.apache.phoenix</groupId> + <artifactId>phoenix-spark</artifactId> + </dependency> + <dependency> + <groupId>org.apache.phoenix</groupId> + <artifactId>phoenix-server</artifactId> + </dependency> + <dependency> + <groupId>org.apache.phoenix</groupId> + <artifactId>phoenix-server-client</artifactId> + </dependency> + </dependencies> {code} I'm surprised to see phoenix-server and phoenix-server-client in this list. My initial thought was that phoenix-client would be a shaded jar for the thick driver. Either way, neither thick or thin driver will need phoenix-server. {code} + <module>phoenix-client</module> {code} Would it better to include the word "shaded" in the module name? {code} + s + <transformer {code} A goof? {code} + <transformers> + <transformer + implementation="org.apache.maven.plugins.shade.resource.IncludeResourceTransformer"> + <resource>NOTICE</resource> + <file>${project.basedir}/../../NOTICE</file> + </transformer> ... + <transformer + implementation="org.apache.maven.plugins.shade.resource.IncludeResourceTransformer"> + <resource>LICENSE.txt</resource> + <file>${project.basedir}/../../LICENSE.txt</file> + </transformer> + </transformers> {code} I hate to be the bearer of bad news, but these are most likely not meeting ASF licensing requirements. For every bundled jar that Phoenix ships in a shaded jar, we're going to have to # Copy any NOTICE text into a NOTICE file in the shaded jar # Copy necessary license and copyright information for non-ASLv2 licensed jars into a LICENSE file in the shaded jar. Yes, this will be horrible, but it is required. > Create shaded clients (thin + thick) > ------------------------------------- > > Key: PHOENIX-2535 > URL: https://issues.apache.org/jira/browse/PHOENIX-2535 > Project: Phoenix > Issue Type: Bug > Reporter: Enis Soztutar > Assignee: Sergey Soldatov > Fix For: 4.8.0 > > Attachments: PHOENIX-2535-1.patch, PHOENIX-2535-2.patch, > PHOENIX-2535-3.patch, PHOENIX-2535-4.patch, PHOENIX-2535-5.patch > > > Having shaded client artifacts helps greatly in minimizing the dependency > conflicts at the run time. We are seeing more of Phoenix JDBC client being > used in Storm topologies and other settings where guava versions become a > problem. > I think we can do a parallel artifact for the thick client with shaded > dependencies and also using shaded hbase. For thin client, maybe shading > should be the default since it is new? -- This message was sent by Atlassian JIRA (v6.3.4#6332)