The latest version of Lucene is causing build failures in our traditional all-in-one jarred dependencies and functional code build.  We've known for some time that this is not consistent with best practices, despite it's conveniences.  We are proposing removing this large jar from the build and providing a single jar with LexEVS code as will as a dependency folder.  This will require updated scripts, but will not change much in our packaging of LexEVS since we already have the option of providing separate dependency files in the with the installer as well as a single LexEVS jar.

 

Best practice notes around building a single combined runtime jar:

Cons

Legal: Some dependency jars may have licensing restrictions that prevent packaging with other dependencies.

Technical: Custom class loaders sometimes look for specific resources or classes inside of specific jar files. This makes our build fragile as we update dependencies.

Dependency Management:  A single jar makes it difficult to understand what the project really depends on.

Our Build is Ant Based:  More advanced single jar solutions such as OneJar have a maven integration.  Moving to maven as a primary build process would be a big risk for the project and may not solve the problem.

 

Pros:

Portability and maintenance is one step.

Our build process could probably use an update. (This still may not solve all our dependency problems where manifests create special class loading situations)