Our jar MANIFEST file also contains:

Bundle-Version: 4.0.0.M2

But shouldn't we also be supplying this information as

Implementation-Version: 4.0.0.M2

so it's in a standardized place?

I'd guess that's a simple maven build change -- I know how to do it
under ant, but not under maven.


Once we do that, then we can use the standard java libraries to
provide the information:

        Object object = new CayenneRuntimeException();
        Package objPackage = object.getClass().getPackage();
        System.out.println("Implementation Version: " +
objPackage.getImplementationVersion());

produces

Implementation Version: 4.0.0.M2

when I add an Implementation-Version: line to the MANIFEST in
cayenne-server-4.0.M2.jar

=====
   Manifest-Version: 1.0
+ Implementation-Version: 4.0.0.M2
   Export-Package: org.apache.cayenne;uses:="org.apache.cayenne.reflect,o
=====

On Mon, Jul 27, 2015 at 9:57 AM, Andrus Adamchik <[email protected]> wrote:
>
>> On Jul 27, 2015, at 4:21 PM, Joe Baldwin <[email protected]> wrote:
>>
>> 1. My goal is to display the version of cayenne server jar I have added to 
>> the project with Cayenne 4.0.
>
> As it happens, Project.CURRENT_PROJECT_VERSION (or its 4.0 alternative) is 
> not the same as the version of cayenne server jar. It denotes the version of 
> the XML mapping format, which does not align with the .jar version.
>
> If you need the version of the jar, here is another approach. While you are 
> not using Maven, Cayenne is assembled with Maven, so each Cayenne jar has 
> some extra metadata that you get for free. Namely there's a "pom.properties" 
> file that you can read and get the version:
>
> Properties props = new Properties();
> String path = 
> "META-INF/maven/org.apache.cayenne/cayenne-server/pom.properties";
> try(InputStream in : 
> ObjectContext.class.getClassLoader().getResourceAsStream(path)) {
>    props.load(in);
> }
>
> String version = props.getProperty("version");
>
> Andrus
>
>

Reply via email to