Sounds like you should be obfuscating *in* module 2 and then adding the
dependency with classifier to module 3 and 4 (or do two obfuscations in
module 2 if you need different flavours)

On Wednesday, 28 August 2013, Richard Sand wrote:

> Hi all,
>
> Wayne, thanks for the feedback. I understand where you're coming from.
> I've written out here a concrete example of what I want to do with these
> plugins, and with maven in general wrt passing generated artifacts between
> plugins. Hopefully others will weigh in on whether this approach is good
> and maven-esque.
>
> I have 4 maven projects:
>
> 1) a global parent pom
> 2) a common API project which creates a jar
> 3) a web application project (a Jersey JAX-RS service fwiw) which creates
> a war and depends on #2
> 4) a java client for #3 (based on JerseyClient), which also depends on #2
>
> 1st example: In project 3, I use my obfuscation plugin on the common API
> and the generated classes. That resulting jar file needs to go into the
> WEB-INF/lib folder of the war file. My proposed change to the maven war
> plugin would make it automatically look for a generated jar artifact
> attached to the project from a previous plug-in and package it
> appropriately. The current alternative, which admittedly is no big deal, is
> to simply have the output artifact created by my plugin go directly into
> WEB-INF/lib. But adding a boolean config variable to maven-war-plugin to
> tell it to look for attached jars and include them seems logical as well as
> trivial to me, but this could just be because of my relative newness to all
> things Maven
>
> 2nd example: in project 4, I again use my obfuscation plugin on the common
> API and generated classes, and then want to take that artifact and, along
> with the rest of the dependencies, use the maven-shade-plugin to build an
> "uberjar". More problematic than example 1 above because the shade plugin
> only looks at artifacts and has no hook to include anything directly from
> the filesystem. So what I did was modify the shade 2.1 source to include a
> new configuration parameter. For simplicy's sake I simply called it "
> alternativeInputClassifier". When present, it instructs shade to look for
> an attached artifact with the artifact name of the project, of type jar,
> and with the specified classifier, in lieu of processing only the main
> project as input. It was a very minor change and I'm happy to provide the
> diff for it. The result is that my pom.xml for project 4 looks like below
> and works beautifully. One pom with two profiles:
>
>         <dependencies>
>                 ....
>                 <dependency>
>                         <groupId>com.idfconnect.myproject</groupId>
>                         <artifactId>common-tools</artifactId>
>                 </dependency>
>         </dependencies>
>         <profiles>
>                 <profile>
>                         <!-- REGULAR (unobfuscated) PROFILE -->
>                         <id>regular</id>
>                         <activation>
>                                 <activeByDefault>true</activeByDefault>
>                         </activation>
>                         <build>
>                                 <plugins>
>                                         <!-- BEGIN SHADE -->
>                                         <plugin>
>
> <groupId>org.apache.maven.plugins</groupId>
>
> <artifactId>maven-shade-plugin</artifactId>
>
> <version>2.1-idfc1</version>
>                                                 <executions>
>                                                         <execution>
>
> <phase>package</phase>
>                                                                 <goals>
>
> <goal>shade</goal>
>                                                                 </goals>
>
> <configuration>
>
> <minimizeJar>true</minimizeJar>
>
> <shadedArtifactAttached>true</shadedArtifactAttached>
>
> <shadedClassifierName>full</shadedClassifierName>
>
> </configuration>
>                                                         </execution>
>                                                 </executions>
>                                         </plugin>
>                                         <!-- END SHADE -->
>                                 </plugins>
>                         </build>
>                 </profile>
>
>                 <!-- OBFUSCATION PROFILE -->
>                 <profile>
>                         <id>obfuscate</id>
>                         <build>
>                                 <plugins>
>                                         <!-- BEGIN OBFUSCATE -->
>                                         <plugin>
>
> <groupId>com.idfconnect.devtools</groupId>
>
> <artifactId>idfc-proguard-maven-plugin</artifactId>
>                                                 <version>1.0.0</version>
>                                                 <executions>
>                                                         <execution>
>
> <phase>package</phase>
>                                                                 <goals>
>
> <goal>obfuscate</goal>
>                                                                 </goals>
>                                                         </execution>
>                                                 </executions>
>                                                 <configuration>
>
> <shrink>false</shrink>
>                                                         <inputArtifacts>
>
> <inputArtifact>com.idfconnect.myproject:common-tools</inputArtifact>
>                                                         </inputArtifacts>
>                                                         <libraryJarPaths>
>
> <libraryJarPath>${java.home}/lib/jsse.jar</libraryJarPath>
>                                                         </libraryJarPaths>
>                                                 </configuration>
>                                                 <dependencies>
>                                                         <dependency>
>
> <groupId>net.sf.proguard</groupId>
>
> <artifactId>proguard-base</artifactId>
>
> <version>4.9</version>
>                                                         </dependency>
>                                                 </dependencies>
>                                         </plugin>
>                                         <!-- END OBFUSCATE -->
>
>                                         <!-- BEGIN SHADE -->
>                                         <plugin>
>
> <groupId>org.apache.maven.plugins</groupId>
>
> <artifactId>maven-shade-plugin</artifactId>
>
> <version>2.1-idfc1</version>
>                                                 <executions>
>                                                         <execution>
>
> <phase>package</phase>
>                                                                 <goals>
>
> <goal>shade</goal>
>                                                                 </goals>
>
> <configuration>
>
> <alternativeInputClassifier>small</alternativeInputClassifier>
>
> <artifactSet>
>
>       <excludes>
>
> -Richard
>
> -----Original Message-----
> From: Wayne Fay [mailto:wayne...@gmail.com <javascript:;>]
> Sent: Tuesday, August 27, 2013 5:04 PM
> To: Maven Users List
> Subject: Re: artifact attached by plugin not appearing in subsequent
> plugins
>
> > Hi Wayne - that seems a very inefficient approach, having 5 or 6
> > separate modules to manage to achieve a single assembly. The point is
> > that maven does have phases, goals, lifecycles - why not use them? The
> > MavenProject object already provides the
>
> Not saying this is ideal for all scenarios. Just saying it is one solution
> that works out of the box and it leaves the door open for customization you
> may need along the way. People here oftentimes say they "just want to do X"
> and so we provide some advice. Then they come back a week later and say
> well actually they need variants of X for different clients, environments,
> architectures, etc so they share how they've been going down the path of
> profiles which most of us here believe is the wrong way to do things. I'm
> just trying to ensure you know TMTOWTDI (perl-ism). :)
>
> > ...I think dividing the construction of a single atomic component into
> > multiple modules because the plugins cannot be chained together is more
> unappealing.
>
> I don't disagree. As I said, this is based on my assumption (perhaps
> wrong) that you have left a great many details out of your original query,
> and the next few emails will describe a monstrous beast you have created
> with profiles and binding plugins to various lifecycles etc in an effort to
> do "all the work" in a single project/module. ;-)
>
> > BTW I haven't touched Ant in at least 6 years, so I doubt I'm an
> > "Ant-oriented person".  :-)
>
> Didn't mean you were necessarily Ant-oriented. I know you've released some
> Maven plugins lately. Thanks for your work in the Maven ecosystem! :)
>
> Wayne
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@maven.apache.org <javascript:;>
> For additional commands, e-mail: users-h...@maven.apache.org<javascript:;>
>
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscr...@maven.apache.org <javascript:;>
> For additional commands, e-mail: dev-h...@maven.apache.org <javascript:;>
>
>

-- 
Sent from my phone

Reply via email to