Details

    • Type: Bug Bug
    • Status: Closed
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 1.1.0
    • Fix Version/s: 1.1.0
    • Component/s: build / infrastructure
    • Labels:
      None

      Description

      From the dev mailing list. (http://www.nabble.com/order-of-build-modules-isn%27t-quite-right-tf4416976.html).

      In short, we are building the aggregate jar before we have built the 1.5 modules. Details follow... BTW, this only seems to apply to the trunk (1.1.0 snapshot).

      ============================================================

      > Yes, that sounds about right. This just recently started to happen...

      Maybe if we create two profiles, one for 1.4 only and one for 5.0, and
      just enable the appropriate one of them? This would increase
      repetition (we could address that with XML entities, of course), but
      might get things to run right.

      • Hide quoted text -

      -Patrick

      On 9/10/07, Kevin Sutter <kwsutter@gmail.com> wrote:
      > On 9/10/07, Patrick Linskey <plinskey@gmail.com> wrote:
      > >
      > > > So, I'm not sure what has to change in our pom.xml files to allow one to
      > > > build, package, and install our aggregrate jar on the first try. Any
      > > maven
      > > > experts that can help with this?
      > >
      > > Sadly, Marc probably knows the most, and he's on top of Mt Kilimanjaro
      > > or thereabouts right now.
      >
      >
      > Yep, and my resident build expert (Mike) is on vacation this week as well..
      >
      >
      > Might this have started happening with the recent move from how the
      > > dependencies are set up, for the purposes of keeping our mvn
      > > dependencies clean?
      >
      >
      > Yes, that sounds about right. This just recently started to happen...
      >
      > Kevin
      >
      > -Patrick
      > >
      > > On 9/10/07, Kevin Sutter <kwsutter@gmail.com> wrote:
      > > > Hi,
      > > > I'm the first to admit that I'm not a maven build expert, so I'm not
      > > exactly
      > > > sure what needs to be changed. But, here's the problem...
      > > >
      > > > If I only want to build the artifacts and install them into my maven
      > > > repository, I issue the following maven command. (BTW, this only
      > > happens on
      > > > a truly clean environment. Either just pull the contents from svn or do
      > > a
      > > > separate "mvn clean" first like I demonstrate below.)
      > > >
      > > > > mvn clean
      > > > > mvn install
      > > >
      > > > But, when I do this, I get the following build report. Although
      > > everything
      > > > builds okay, look at the order of the modules getting built. We are
      > > > building the aggregrate jar and distribution jars before we build kernel
      > > 1.5,
      > > > jpa, and jpa jdbc. Thus, the aggregrate jar that we build does not have
      > > all
      > > > of the required contents (because I have a clean environment to start
      > > with).
      > > >
      > > > [INFO]
      > > > ------------------------------------------------------------------------
      > > > [INFO] Reactor Summary:
      > > > [INFO]
      > > > ------------------------------------------------------------------------
      > > > [INFO] OpenJPA ............................................... SUCCESS [
      > > > 1.328s]
      > > > [INFO] OpenJPA Utilities ..................................... SUCCESS [
      > > > 12.265s]
      > > >
      > > > [INFO] OpenJPA Kernel ........................................ SUCCESS [
      > > > 17.703s]
      > > >
      > > > [INFO] OpenJPA JDBC .......................................... SUCCESS [
      > > > 10.063s]
      > > >
      > > > [INFO] OpenJPA XML Store ..................................... SUCCESS [
      > > > 0.969s]
      > > > [INFO] OpenJPA Aggregate Jar ................................. SUCCESS [
      > > > 17.218s]
      > > >
      > > > [INFO] OpenJPA Distribution .................................. SUCCESS [
      > > > 19.860s]
      > > >
      > > > [INFO] OpenJPA Integration Tests ............................. SUCCESS [
      > > > 0.015s]
      > > > [INFO] OpenJPA Examples Integration Tests .................... SUCCESS [
      > > > 0.016s]
      > > > [INFO] OpenJPA JPA TCK Integration Tests ..................... SUCCESS [
      > > > 0.016s]
      > > > [INFO] OpenJPA Kernel 1.5 .................................... SUCCESS [
      > > > 0.718s]
      > > > [INFO] OpenJPA JPA ........................................... SUCCESS [
      > > > 4.719s]
      > > > [INFO] OpenJPA JDBC 1.5 ...................................... SUCCESS [
      > > > 0.625s]
      > > > [INFO] OpenJPA JPA JDBC ...................................... SUCCESS [
      > > > 17.437s]
      > > >
      > > > [INFO] OpenJPA Persistence Examples .......................... SUCCESS [
      > > > 0.547s]
      > > > [INFO]
      > > > ------------------------------------------------------------------------
      > > > [INFO]
      > > > ------------------------------------------------------------------------
      > > >
      > > > I looked at our pom.xml at our root level of trunk and I see the
      > > following
      > > > <module> listing, which maps to the order of the build above:
      > > >
      > > > <modules>
      > > > <module>openjpa-lib</module>
      > > > <module>openjpa-kernel</module>
      > > > <module>openjpa-jdbc</module>
      > > > <module>openjpa-xmlstore</module>
      > > > <module>openjpa-all</module>
      > > > <module>openjpa-project</module>
      > > > <module>openjpa-integration</module>
      > > > </modules>
      > > >
      > > > The rest of our modules are listed under the jdk1.5 profile and don't
      > > get
      > > > built until after these 1.4 modules are built. If I re-run the exact
      > > same
      > > > invocation (without starting from scratch with the "mvn clean"), then
      > > > everything works since the 1.5 modules are all built and pulled into the
      > > > aggregrate jar.
      > > >
      > > > So, I'm not sure what has to change in our pom.xml files to allow one to
      > > > build, package, and install our aggregrate jar on the first try. Any
      > > maven
      > > > experts that can help with this?
      > > >
      > > > Thanks,
      > > > Kevin
      > > >
      > >
      > >
      > > –
      > > Patrick Linskey
      > > 202 669 5907
      > >
      >

      1. OPENJPA-364-3.patch
        5 kB
        David Jencks
      2. OPENJPA-364.patch
        4 kB
        Catalina Wei
      3. OPENJPA-364.patch
        1 kB
        Kevin Sutter

        Issue Links

          Activity

          Hide
          Catalina Wei added a comment -

          my mvn knowledge is limited, but this patch seems to solve the build problem.

          Show
          Catalina Wei added a comment - my mvn knowledge is limited, but this patch seems to solve the build problem.
          Hide
          Craig L Russell added a comment -

          IIRC, the reason we recently changed the build was to avoid having the aggregate jar declare dependencies at runtime on the other jars, which leads to the situation where a user downloads the aggregate jar which then causes all of the other jars to be downloaded and added to the path as well.

          So, can you verify that if you have a simple project that has a dependency on the aggregate jar, the only jar downloaded is the aggregate jar?

          Show
          Craig L Russell added a comment - IIRC, the reason we recently changed the build was to avoid having the aggregate jar declare dependencies at runtime on the other jars, which leads to the situation where a user downloads the aggregate jar which then causes all of the other jars to be downloaded and added to the path as well. So, can you verify that if you have a simple project that has a dependency on the aggregate jar, the only jar downloaded is the aggregate jar?
          Hide
          Kevin Sutter added a comment -

          Catalina's suggested patch fixes the build order, but it basically re-instates the problem that was resolved by OPENJPA-345. Actually, if you look at the patches for these two Issues, they cancel each other out. So, we have more work to do...

          Kevin

          Show
          Kevin Sutter added a comment - Catalina's suggested patch fixes the build order, but it basically re-instates the problem that was resolved by OPENJPA-345 . Actually, if you look at the patches for these two Issues, they cancel each other out. So, we have more work to do... Kevin
          Hide
          Kevin Sutter added a comment -

          Question: Why do we even have the "jdk1.5" profile in the trunk's pom file? I think at one time, we were attempting to use this to force the compilation of some modules with jdk1.5 and others with jdk1.4. But, now that each of the individual module's pom files have the jdk level configured, I don't see where we need the jdk1.5 profile any longer.

          As a test, I removed the jdk 1.5 profile and moved those modules to the top-level module list in the trunk's pom file. Like Catalina's previous patch, things are working better now, but is this the "right solution"?

          I've attached the patch in case anybody wants to check it out.

          Kevin

          Show
          Kevin Sutter added a comment - Question: Why do we even have the "jdk1.5" profile in the trunk's pom file? I think at one time, we were attempting to use this to force the compilation of some modules with jdk1.5 and others with jdk1.4. But, now that each of the individual module's pom files have the jdk level configured, I don't see where we need the jdk1.5 profile any longer. As a test, I removed the jdk 1.5 profile and moved those modules to the top-level module list in the trunk's pom file. Like Catalina's previous patch, things are working better now, but is this the "right solution"? I've attached the patch in case anybody wants to check it out. Kevin
          Hide
          David Jencks added a comment -

          I'm not sure what the previous patch that modifies the root pom is supposed to do but I can't see why it would affect this issue. I think what you want is to use maven scopes. The attached patch uses scope "provided" for all the dependencies which basically makes them non-transitive. In addition to not wanting to have dependencies on openjpa "mini-jars" I really doubt you want dependencies on the geronimo spec implementation jars. I don't know about serp.... in my patch I left it out also.

          Show
          David Jencks added a comment - I'm not sure what the previous patch that modifies the root pom is supposed to do but I can't see why it would affect this issue. I think what you want is to use maven scopes. The attached patch uses scope "provided" for all the dependencies which basically makes them non-transitive. In addition to not wanting to have dependencies on openjpa "mini-jars" I really doubt you want dependencies on the geronimo spec implementation jars. I don't know about serp.... in my patch I left it out also.
          Hide
          Michael Dick added a comment -

          Thanks for the patch David!

          David's approach worked for me so I've gone ahead and committed it with one change. I didn't change the scope of serp to be provided. I think it makes sense for serp to be included since OpenJPA won't run without it.

          I'm a bit ambivalent regarding the geronimo specs. Its likely that users will have their own copy of these dependencies and they might prefer to pick up the version that matches their deploy environment. For JEE this would be the app server's j2ee.jar. For JSE users will have to download a particular version.

          I'm leaving the JIRA open so we can discuss whether users should be expected to provide j2ee.jar (or the individual spec jars).

          Show
          Michael Dick added a comment - Thanks for the patch David! David's approach worked for me so I've gone ahead and committed it with one change. I didn't change the scope of serp to be provided. I think it makes sense for serp to be included since OpenJPA won't run without it. I'm a bit ambivalent regarding the geronimo specs. Its likely that users will have their own copy of these dependencies and they might prefer to pick up the version that matches their deploy environment. For JEE this would be the app server's j2ee.jar. For JSE users will have to download a particular version. I'm leaving the JIRA open so we can discuss whether users should be expected to provide j2ee.jar (or the individual spec jars).
          Hide
          Kevin Sutter added a comment -

          This one doesn't apply to the 1.0.x stream...

          Show
          Kevin Sutter added a comment - This one doesn't apply to the 1.0.x stream...
          Hide
          Craig L Russell added a comment -

          When we remove the spec jars from explicit dependency, we expose the user to class not found exceptions unless the user's pom.xml references them.

          In an app server environment, this is absolutely not an issue, but in Java SE don't we need the user's pom to depend on them?

          Show
          Craig L Russell added a comment - When we remove the spec jars from explicit dependency, we expose the user to class not found exceptions unless the user's pom.xml references them. In an app server environment, this is absolutely not an issue, but in Java SE don't we need the user's pom to depend on them?
          Hide
          Michael Dick added a comment -

          In a JSE environment they will need the spec jars, or a copy of j2ee.jar from an app server.

          The main reason I didn't include the spec jars as "normal" dependencies is that they're rather tough to remove. If another maven project depends on OpenJPA we would always add the Geronimo spec jars to the classpath. If for some reason that project didn't want the Geronimo implementation they'd have to manipulate maven so that a different version is loaded first. Theoretically this is as simple as listing the other dependency first, but that might depend on the maven dependency resolver. If the user wants to use the Geronimo spec jars then they don't have to do anything.

          The way it currently works the user has to provide their own version of the spec jars (or j2ee.jar). They can add whichever dependency(ies) they want into pom.xml and won't have to worry about the order on the classpath. The only reason I can think of for doing this is if you're running the app in JSE to test it prior to deploying on an app server and you want to use the same version of the spec jars that are part of the app server. This is probably a corner case, but I can be persuaded otherwise.

          All that being said I'd prefer to include the spec jars as "normal" dependencies. I think that the Geronimo implementation is TCK compliant and there shouldn't be any difference between vendors in the spec jars. Unless there are other reasons to leave them out I'll go ahead and put them back in.

          Show
          Michael Dick added a comment - In a JSE environment they will need the spec jars, or a copy of j2ee.jar from an app server. The main reason I didn't include the spec jars as "normal" dependencies is that they're rather tough to remove. If another maven project depends on OpenJPA we would always add the Geronimo spec jars to the classpath. If for some reason that project didn't want the Geronimo implementation they'd have to manipulate maven so that a different version is loaded first. Theoretically this is as simple as listing the other dependency first, but that might depend on the maven dependency resolver. If the user wants to use the Geronimo spec jars then they don't have to do anything. The way it currently works the user has to provide their own version of the spec jars (or j2ee.jar). They can add whichever dependency(ies) they want into pom.xml and won't have to worry about the order on the classpath. The only reason I can think of for doing this is if you're running the app in JSE to test it prior to deploying on an app server and you want to use the same version of the spec jars that are part of the app server. This is probably a corner case, but I can be persuaded otherwise. All that being said I'd prefer to include the spec jars as "normal" dependencies. I think that the Geronimo implementation is TCK compliant and there shouldn't be any difference between vendors in the spec jars. Unless there are other reasons to leave them out I'll go ahead and put them back in.
          Hide
          Craig L Russell added a comment -

          > The main reason I didn't include the spec jars as "normal" dependencies is that they're rather tough to remove.
          > ...
          > The way it currently works the user has to provide their own version of the spec jars (or j2ee.jar). They can add whichever dependency(ies) they want into pom.xml and won't have to worry about the order on the classpath.

          Anyway, the pom.xml isn't used for deployment in a server, so this is just for Java SE environments.

          1. The user does have a choice of where to get the API definitions (from Geronimo spec jars or javaee jar or persistence jar).

          2. OpenJPA doesn't have a hard dependency on any of them (all OpenJPA cares about is that the definitions of the APIs are the same, which in this case they are).

          3. Maven will put into the classpath whatever the user's pom.xml says to.

          Therefore, I'd prefer to provide some good sample pom.xml dependencies but not to explicitly depend on Geronimo jars. I looked at our distributed pom.xml and they're pretty obscure. We should probably include the spec dependencies in the docs and see about adding some pom.xml examples that are really simple.

          Show
          Craig L Russell added a comment - > The main reason I didn't include the spec jars as "normal" dependencies is that they're rather tough to remove. > ... > The way it currently works the user has to provide their own version of the spec jars (or j2ee.jar). They can add whichever dependency(ies) they want into pom.xml and won't have to worry about the order on the classpath. Anyway, the pom.xml isn't used for deployment in a server, so this is just for Java SE environments. 1. The user does have a choice of where to get the API definitions (from Geronimo spec jars or javaee jar or persistence jar). 2. OpenJPA doesn't have a hard dependency on any of them (all OpenJPA cares about is that the definitions of the APIs are the same, which in this case they are). 3. Maven will put into the classpath whatever the user's pom.xml says to. Therefore, I'd prefer to provide some good sample pom.xml dependencies but not to explicitly depend on Geronimo jars. I looked at our distributed pom.xml and they're pretty obscure. We should probably include the spec dependencies in the docs and see about adding some pom.xml examples that are really simple.
          Hide
          Patrick Linskey added a comment -

          This is probably a non-issue now that we've gotten rid of the multiple-java-version support.

          Show
          Patrick Linskey added a comment - This is probably a non-issue now that we've gotten rid of the multiple-java-version support.
          Hide
          Kevin Sutter added a comment -

          I agree. This Issue can go away.

          Show
          Kevin Sutter added a comment - I agree. This Issue can go away.

            People

            • Assignee:
              Unassigned
              Reporter:
              Kevin Sutter
            • Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved:

                Development