# Buckminster: Plugin Version in Java source File einfügen



## blacksoldier (7. Sep 2010)

Hallo,
bisher benutze ich für meine eclipse product PDE als build System. Diesen stell ich grade auf buckminster um. Funktioniert  auch wunderbar.

Jetzt möchte ich noch das die Plugin Version in den source code der Klasse Version eingefügt wird bevor der source kompiliert wird.
Bisher habe ich das über die customBuilcCallbacks gelöst. 

Für buckminster habe ich auch schon eine buckminster.cspex im Plugin angelegt.
Habe mich hier an den Foreneintrag über die about.mappings gehalten.

Mein erstes Problem ist hierbei wie komme ich an die Aktuelle Plugin Version inkl. qualifier ran?
Das  zweite Problem ist das ich nicht genau weiss wann und wie ich meine action _insert.version_
aufrufen muss. 
Zum Testen hab ichs in die Gruppe eclipse.build.source aufgenommen. Der Token @runtime_version@ wird auch erfolgreich ersetzt nur liegt dieser nur im buckminster temp folder drin jedoch nicht im gebauten jar file.

buckminster.cspex
[XML]
<?xml version="1.0" encoding="UTF-8"?>
<cspecExtension
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:bc="http://www.eclipse.org/buckminster/Common-1.0"
	xmlns="http://www.eclipse.org/buckminster/CSpec-1.0">

	<artifacts>
		<private name="raw.version.source">
			<path path="src/runtime/util/Version.java"/>
		</private>
	</artifacts>

	<actions>   
		<private name="insert.version" actor="ant">
			<actorProperties>
				<property key="buildFileId" value="buckminster.pdetasks"/>
				<property key="targets" value="replaceToken"/>
			</actorProperties>
			<properties>
				<property key="token" value="@runtime_version@"/>
				<property key="value" value="TODO"/>
			</properties>
			<prerequisites>
				<attribute alias="action.input" name="raw.version.source"/>
			</prerequisites>
			<products alias="action.output" base="${buckminster.output}/temp/">
				<path path="src/runtime/util/Version.java" />
			</products>
		</private>
	</actions>

	<groups>
		<private name="eclipse.build.source">
			<attribute name="eclipse.build.source.old"/>
			<attribute name="insert.version"/>
		</private>
	</groups>

	<alterArtifacts>
		<rename oldName="eclipse.build.source" newName="eclipse.build.source.old"/>
	</alterArtifacts>

</cspecExtension>
[/XML]

Leider kann ich das nicht übder die eclipse/osgi api machen da diese klassen unabhängig von der eclipse platform sein müssen da diese nachher außerhalb von eclipse auf bluray(settop boxen laufen müssen.

Hoffe ihr könnt mir hierbei Helfen.


----------



## Wildcard (7. Sep 2010)

Möchtest du das es im generierten Source Bundle ersetzt wird, oder tatsächlich im Kompilat? Wenn letzteres ist eclipse.build.source die falsche Gruppe, da damit AFAIK die Source Bundles gebaut werden.
An den Build Qualifier müsstest du mit ${qualifier.replacement} kommen.
Hast du die Frage in der Buckminster Newsgroup gestellt? Dort kann man dir sicher weiterhelfen.


----------



## blacksoldier (8. Sep 2010)

Das soll nachher ins kompilierte jar rein.

Leider klappt das mit dem ${qualifier.replacement} nicht.
Es erscheint nun direct das "${qualifier.replacement}" im source file.
Im eclipse bugzilla hab ich dort diesen eintrag gefunden https://bugs.eclipse.org/bugs/show_bug.cgi?id=321753.

An welcher stelle muss ich den meine action aufrufen. Beim "eclipse.build" ?

Hier ist der Eintrag in den eclipse Foren:
Eclipse Community Forums


----------



## Wildcard (10. Sep 2010)

> An welcher stelle muss ich den meine action aufrufen. Beim "eclipse.build" ?


Das sollte eigentlich funktionieren...


----------



## blacksoldier (15. Sep 2010)

Habs jetzt wie folge gelöst:
Habs über nen eigenen ant task gelöst:

buckminster.cspex
[XML]
<?xml version="1.0" encoding="UTF-8"?>
<cspecExtension
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:bc="http://www.eclipse.org/buckminster/Common-1.0"
	xmlns="http://www.eclipse.org/buckminster/CSpec-1.0">

	<artifacts>
		<private name="raw.version.source" base="src/runtime">
			<path path="Version.java"/>
		</private>
	</artifacts>

	<actions>   
		<private name="insert.version" actor="ant">
			<actorProperties>
				<property key="buildFile" value="tools.ant"/>
				<property key="targets" value="replaceVersion"/>
			</actorProperties>
			<prerequisites>
			 	<attribute name="manifest" alias="manifest"/>
				<attribute alias="action.input" name="raw.version.source"/>
			</prerequisites>
		</private>
	</actions>

	<alterActions>
		<public name="eclipse.build" actor="eclipse.build">
			<alterPrerequisites>
				<attribute name="insert.version" />
			</alterPrerequisites>
		</public>
	</alterActions>

</cspecExtension>
[/XML]

tools.ant:
[XML]
<project>

	<import file="${buckminster.pdetasks}"/>

	<property name="version.token" value="@runtime_version@"/>

	<target name="replaceVersion">
		<extractBundleVersion file="${sp:manifest}" property="bundle.version"/> 
		<replace token="${version.token}" value="${bundle.version}" file="${sp:action.input}"/>
	</target>

</project>
[/XML]


----------

