If it helps anybody else, I ended up using Guava's
ClassInfo.getResourceName() and concatenated that with
project.getBuild().get[Test]OutputDirectory() and checked that with
File.exists(). I then encapsulated that in a Java 8 Predicate called
"isProjectClass()" and used that as a Java 8 Stream filter. I'll soon be
pushing this to https://github.com/revelc/warbucks-maven-plugin, if anybody
is interested in reusing my strategy.

On Mon, Sep 5, 2016 at 2:04 PM Christopher <[email protected]> wrote:

> Unfortunately, using project.getBuild().getOutputDirectory() doesn't work
> either. The classloader I created from that still contains other classes,
> like plexus, and jdk classes. Additionally, because it didn't have the
> dependencies, some of the annotations I need to process weren't loaded by
> the classloader.
>
> At this point, I think what I need to do is manually walk through the
> *.class files in project.getBuild().getOutputDirectory() and use what I
> find to filter the classes in the classloader from
> project.getCompileClasspathElements(). I was hoping Maven provided a
> primitive to list these classes, but walking the directory tree should
> work. I've just got to be careful about matching the filenames with the
> class names in the classloader, especially with respect to anonymous
> inner-classes, member classes, static nested classes, and secondary classes
> defined in the same .java file.
>
> On Mon, Sep 5, 2016 at 1:40 PM Guillaume Boué <[email protected]> wrote:
>
>> Hi,
>>
>> You should be able to get only the project compiled classes with
>> project.getBuild().getOutputDirectory(). Internally, this is what
>> getCompileClasspathElements does. For the test classpath, you have the
>> similar project.getBuild().getTestOutputDirectory().
>>
>> With those two folders, you can create the URLClassLoader that load the
>> classes.
>>
>> Guillaume,
>>
>>
>> Le 05/09/2016 à 06:05, Francois-Xavier Bonnet a écrit :
>> > When I wrote builder-maven-plugin <https://javabuild.java.net/> I had
>> to do
>> > things with some project classes. What I did was scan the source code
>> and
>> > then load the corresponding .class for each .java file found. Maybe you
>> > could do the same.
>> > The code is here:
>> >
>> https://github.com/javabuild/builder-parent/blob/master/builder-maven-plugin/src/main/java/net/java/javabuild/ExecuteMojo.java
>> >
>> > On 5 September 2016 at 13:56, Barrie Treloar <[email protected]>
>> wrote:
>> >
>> >> On 5 September 2016 at 12:11, Christopher <[email protected]> wrote:
>> >>
>> >>> Hi,
>> >>>
>> >>> I'm trying to write a Maven plugin which gets, and processes, a list
>> of
>> >>> classes from the project. I want to be able to get the project classes
>> >>> compiled from either src/main/java (compile scope), and src/test/java
>> >> (test
>> >>> scope, minus compile scope), depending on user configuration.
>> >>>
>> >>> So far, the closest things I've found to help me are (project is an
>> >>> instance of MavenProject):
>> >>> project.getCompileClasspathElements()
>> >>> and
>> >>> project.getTestClasspathElements()
>> >>>
>> >>> I then use that to build a URLClassLoader, which I then use Guava's
>> >>> ClassPath utility to find all the classes.
>> >>>
>> >>> The problem is, that brings in the whole classpath, and all I want is
>> >> just
>> >>> the project's own classes, not those from dependencies (including Java
>> >>> itself). And, the test classpath elements includes the compile-time
>> >> scoped
>> >>> items, as well, which I don't necessarily want. I could probably do
>> set
>> >>> subtraction to remove the compile-time scope from the test scope, but
>> I
>> >>> can't figure out how to get rid of what's being added as dependencies,
>> >>> which I don't wish to process. Perhaps I can do set subtraction from
>> the
>> >>> dependencies? Is there a way to enumerate the classpath of just the
>> >>> dependencies?
>> >>>
>> >>> Has anybody done anything like this? Is there a better way to get only
>> >> the
>> >>> project's own classes?
>> >>>
>> >> Why are you wanting to do this?
>> >>
>> >> Are the output files in target/classes and target/test-classes not
>> >> sufficient?
>> >>
>>
>>
>> ---
>> L'absence de virus dans ce courrier électronique a été vérifiée par le
>> logiciel antivirus Avast.
>> https://www.avast.com/antivirus
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [email protected]
>> For additional commands, e-mail: [email protected]
>>
>>

Reply via email to