jira.codehaus.org

  • Log In Access more options
    • Online Help
    • Keyboard Shortcuts
    • About JIRA
    • JIRA Credits
    • What?s New
  • Dashboards Access more options (Alt+d)
  • Projects Access more options (Alt+p)
  • Issues Access more options (Alt+i)
  • Maven 2.x WAR Plugin
  • MWAR-215

class file JAR inconsistency (archiveClasses and attachClasses options)

  • Log In
  • Views
    • XML
    • Word
    • Printable

Details

  • Type: Improvement Improvement
  • Status: Open Open
  • Priority: Major Major
  • Resolution: Unresolved
  • Affects Version/s: 2.1-beta-1
  • Fix Version/s: None
  • Component/s: None
  • Labels:
    None
  • Testcase included:
    yes
  • Patch Submitted:
    Yes

Description

Copy-paste from http://article.gmane.org/gmane.comp.jakarta.turbine.maven.devel/94789

I have a couple of issues with the current WAR plugin and the way it
packages class files in JAR files (archiveClasses and attachClasses
configuration options), as these two options work independently of each
other:

  • archiveClasses moves all class files (and related resources) from
    "classes" directory to JAR file inside WEB-INF/lib directory
  • attachClasses creates a new JAR file in "target" directory from same
    set of files and attaches it to the Maven project with some qualifier
    (by default it uses "classes" qualifier)
    When we deploy artifacts to Maven repository, this results in two
    different JAR files being deployed: one inside WAR and the other
    separate from WAR.

Problems with this approach:

  • two different JAR files with different MD5/SHA1 checksums.
  • the naming convention for these two JAR files is different

These issues really start to snag you when you need to perform updates
after the initial deploy of the WAR. Consider the following scenario:

  • development team hands WAR artifact over to deployment team for deployment
  • development team needs to give an update to the webapp code (the
    dependencies have not changed). One approach is to give the whole WAR
    again, but a more reasonable approach would be to give only JAR file, as
    it contains all the changes and dependent JARs have not changed.

Whole-WAR-approach becomes especially problematic, when the update needs
to be uploaded over slow network links and you are in a hurry. However,
giving only JAR file presents us with some problems:

  1. there is no easy way to check the currently deployed webapp JAR
    version, as the checksum of the embedded JAR file does not match any
    other JAR file in the Maven repository.
  2. as the naming convention differs, it is going to confuse the
    deployment team

Solution to this mess? Unify the way "archiveClasses" and
"attachClasses" functionalities work, so they would operate on the same
JAR file. The way this would work:

  • if "archiveClasses" option is specified, it moves all class files to
    JAR file inside WEB-INF/lib directory (same as before). It would use the
    same naming convention as regular Maven JAR artifacts, with some qualifier.
  • if "attachClasses" option is specified, it attaches that same JAR
    file (as created in previous point) to the Maven project.
  • if "attachClasses" is specified, but no "archiveClasses" - nothing
    happens. Or maybe we should then implicitly turn on also the
    "archiveClasses" option?

This has some implications for backwards compatibility:

  • naming convention of the embedded JAR file is changed
  • the attached JAR file is no longer created in the "target"
    directory, next to the WAR file (it is now attached directly from
    WEB-INF/lib directory)
  • Options
    • Sort By Name
    • Sort By Date
    • Ascending
    • Descending
    • Download All

Attachments

  1. Text File
    maven-WAR-plugin-classes.patch
    11/Jan/10 10:04 AM
    18 kB
    Neeme Praks

Issue Links

duplicates

Bug - A problem which impairs or prevents the functions of the product. MWAR-161 Overridden artifact finalName ist ignored by the war plugin.

  • Major - Major loss of function.
  • Closed - The issue is considered finished, the resolution is correct. Issues which are not closed can be reopened.

Bug - A problem which impairs or prevents the functions of the product. MWAR-176 when archiveClasses is true, jar file has incorrect name

  • Major - Major loss of function.
  • Closed - The issue is considered finished, the resolution is correct. Issues which are not closed can be reopened.

Activity

Ascending order - Click to sort in descending order
  • All
  • Comments
  • Work Log
  • History
  • Activity
Hide
Permalink
Jason van Zyl added a comment - 11/Jan/10 10:17 AM

What are you plans to preserve backward compatibility? We are taking the same approach with plugins that we are with the Maven 3.x core. You must provide backward compatibility with a path to use the new features. It's unlikely this will be accepted if backward compatibility is not considered.

Show
Jason van Zyl added a comment - 11/Jan/10 10:17 AM What are you plans to preserve backward compatibility? We are taking the same approach with plugins that we are with the Maven 3.x core. You must provide backward compatibility with a path to use the new features. It's unlikely this will be accepted if backward compatibility is not considered.
Hide
Permalink
Stéphane Nicoll added a comment - 11/Jan/10 10:19 AM

Exactly what I said on the dev list.

Show
Stéphane Nicoll added a comment - 11/Jan/10 10:19 AM Exactly what I said on the dev list.
Hide
Permalink
Neeme Praks added a comment - 12/Jan/10 2:07 AM

I can rework the patch, I just need to know, what the behavior should be:

  1. by default turn on the consistent behavior (as the old behavior seems quite broken to me) and the user can enable the old behavior with some flag (e.g. legacyStyleClassesJar=true)
  2. by default leave the old behavior and the user can enable the new behavior with some flag (e.g. consistentClassesJar=true)

I personally prefer the first approach, but you know better. Also, what should be the configuration option name, to switch between the new and old behavior?

Show
Neeme Praks added a comment - 12/Jan/10 2:07 AM I can rework the patch, I just need to know, what the behavior should be:
  1. by default turn on the consistent behavior (as the old behavior seems quite broken to me) and the user can enable the old behavior with some flag (e.g. legacyStyleClassesJar=true)
  2. by default leave the old behavior and the user can enable the new behavior with some flag (e.g. consistentClassesJar=true)
I personally prefer the first approach, but you know better. Also, what should be the configuration option name, to switch between the new and old behavior?
Hide
Permalink
Dennis Lundberg added a comment - 11/Aug/10 5:12 PM

Usually when we change the behavior of a feature, the old behavior is the default. If someone wants the new behavior the need to change their configuration. That way we maintain backwards compatibility. So option 2 is what we want.

Show
Dennis Lundberg added a comment - 11/Aug/10 5:12 PM Usually when we change the behavior of a feature, the old behavior is the default. If someone wants the new behavior the need to change their configuration. That way we maintain backwards compatibility. So option 2 is what we want.
Hide
Permalink
Stéphane Nicoll added a comment - 12/Aug/10 2:33 AM

Think at it again, the backward compatibility issue is limited. What we could do is allow users to provide (optionally) the name of the embedded jar. As for the location of the file either we create it at the same location and copy it to WEB-INF/lib or we don't but it would only affect custom scripts relying on that specific location. If they do, these are probably old scripts before attachClasses came out so it's a good reason to upgrade.

Show
Stéphane Nicoll added a comment - 12/Aug/10 2:33 AM Think at it again, the backward compatibility issue is limited. What we could do is allow users to provide (optionally) the name of the embedded jar. As for the location of the file either we create it at the same location and copy it to WEB-INF/lib or we don't but it would only affect custom scripts relying on that specific location. If they do, these are probably old scripts before attachClasses came out so it's a good reason to upgrade.
Hide
Permalink
Dennis Lundberg added a comment - 14/Aug/10 2:51 AM

Sure, we can do it like that and make sure to document the new behavior properly.

Show
Dennis Lundberg added a comment - 14/Aug/10 2:51 AM Sure, we can do it like that and make sure to document the new behavior properly.

People

  • Assignee:
    Unassigned
    Reporter:
    Neeme Praks
Vote (3)
Watch (4)

Dates

  • Created:
    11/Jan/10 10:04 AM
    Updated:
    16/Aug/10 1:46 AM
  • Atlassian JIRA (v5.0.4#731-sha1:3aa7374)
  • Report a problem
  • Powered by a free Atlassian JIRA open source license for Codehaus. Try JIRA - bug tracking software for your team.