2013-02-25 7 views
5

Ich habe eine Eclipse RCP-Anwendung (Indigo) mit Tycho gebaut. Der Build wird auf einem Win 7, 64-Bit-Computer ausgeführt.Mac-Verteilung von Eclipse RCP-Anwendung mit Tycho unter Windows gebaut startet nicht

Die Mutter POM umfasst:

<plugin> 
    <groupId>org.eclipse.tycho</groupId> 
    <artifactId>target-platform-configuration</artifactId> 
    <version>${tycho-version}</version> 
    <configuration> 
    <resolver>p2</resolver> 

    <environment> 
    <os>linux</os> 
    <ws>gtk</ws> 
    <arch>x86_64</arch> 
    </environment> 
    <environment> 
    <os>win32</os> 
    <ws>win32</ws> 
    <arch>x86_64</arch> 
    </environment> 
    <environment> 
    <os>macosx</os> 
    <ws>cocoa</ws> 
    <arch>x86_64</arch> 
    </environment> 

... 

Die Produktkonfiguration sieht wie folgt aus (mit einigen Auslassungen und zusätzliche Zeilenumbrüche für readbility):

<product name="My App" uid="myapp.product" id="myapp.core.product" application="myapp.core.application" version="0.1.4.qualifier" useFeatures="true" includeLaunchers="true"> 

    <configIni use="default"> 
    </configIni> 

    <launcherArgs> 
     <programArgs>-data @noDefault</programArgs> 
     <vmArgsMac>-XstartOnFirstThread 
         -Dorg.eclipse.swt.internal.carbon.smallFonts</vmArgsMac> 
    </launcherArgs> 

    <launcher name="myapp_0_1_4"> 
     <solaris/> 
     <win useIco="false"> 
     <bmp/> 
     </win> 
    </launcher> 

    <vm> 
     <macos include="false">org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6</macos> 
    </vm> 

    <plugins> 
     <plugin id="com.ibm.icu"/> 
     <plugin id="myapp.core"/> 
     <plugin id="org.eclipse.core.runtime"/> 
     <plugin id="org.eclipse.core.runtime.compatibility.registry" fragment="true"/> 
     <plugin id="org.eclipse.equinox.app"/> 
     <plugin id="org.eclipse.equinox.common"/> 
     <plugin id="org.eclipse.osgi"/> 
     <plugin id="org.eclipse.swt"/> 
     <plugin id="org.eclipse.swt.win32.win32.x86_64" fragment="true"/> 
     <plugin id="org.eclipse.ui"/> 
     <plugin id="org.eclipse.ui.workbench"/> 
    </plugins> 

    <features> 
     <feature id="org.eclipse.rcp" version="3.7.2.v20120120-1424-9DB5FmnFq5JCf1UA38R-kz0S0272"/> 
     <feature id="myapp.platform_dependencies.feature" version="0.1.4.qualifier"/> 
     <feature id="myapp.core.feature" version="0.1.4.qualifier"/> 
     <feature id="myapp.ui.feature" version="0.1.4.qualifier"/> 
     <feature id="myapp.model.feature" version="0.1.4.qualifier"/> 
    </features> 

    <configurations> 
     <plugin id="org.eclipse.core.runtime" autoStart="true" startLevel="0" /> 
     <plugin id="org.eclipse.equinox.common" autoStart="true" startLevel="2" /> 
    </configurations> 

</product> 

Der Build ohne Probleme läuft, und erzeugt ZIP-Dateien, die auf den Ziel-Betriebssystemen Windows & Linux ausgepackt enthalten funktionierende Trägerraketen. (Unter Linux muss ich den Launcher ausführbar machen, bevor sie ausgeführt werden zu können.)

Unter Mac OS X (10.6.8), aber der Launcher (myapp.app) tut nichts ...

Wenn ich java -jar -XstartOnFirstThread plugins/org.eclipse.equinox.launcher_[version] ausführen, wird die Anwendung gestartet, wenn auch ohne den Begrüßungsbildschirm.

Ich kann mir vorstellen, dass ich irgendwo in meiner Produktkonfiguration eine falsche Einstellung habe, aber es macht mir nichts aus.

+0

Ich sollte hinzufügen, dass ich den Indigo P2-Repo anstelle einer lokalen Zielplattform im Build verwenden. –

+0

Ein Hinweis für .app-Neulinge wie mich: 'myapp.app' ist eigentlich ein Ordner, und das Festlegen des ausführbaren Bits für diesen Ordner - sofern nicht rekursiv erfolgt - ändert nichts. Die eigentliche Launcher-Datei befindet sich in diesem Ordner unter * myapp.app/Contents/MacOS/myapp *, und das Festlegen des ausführbaren Bits für diese Datei ('chmod + x myapp') wird den Zweck erfüllen und die App ausführbar machen (a) Führen Sie diese Datei über die Befehlszeile aus (von * myapp.app/Contents/MacOS/* mit './myapp'), (b) mit einem Doppelklick auf * myapp.app/Contents/MacOS/myapp * oder (c) per Doppelklick auf * myapp.app * selbst (im Finder) –

Antwort

3

Cross-Plattform-Build unter Windows für Mac wird voraussichtlich nicht funktionieren. Der Grund ist, dass Tycho/p2 ein Dateisystem mit Unix-Berechtigungen simulieren müsste. Es gibt eine request for this in Tycho Problem Tracker, aber IMHO Umsetzung dies ist nicht die Mühe wert.

+0

Ich habe den Fehlerbericht gelesen und werde an dieser Stelle nicht zur Diskussion beitragen eine Implementierung der ausführbaren Bit-Funktion für Windows ist hilfreich oder nicht (ich bin sowieso ziemlich OS-agnostisch), aber können Sie bestätigen, dass das Verschieben des Builds auf zB Linux dies beheben wird? –

+2

Ja, Cross-Plattform-Builds mit Tycho funktionieren, wenn die Build-Maschine ein * nix-System ist. – oberlies

1

Ich habe gerade herausgefunden, wie OSX ausführbare .app von Windows zu machen.

Sie können den Tycho-Build so einstellen, dass .tar.gz-Dateien für Mac/Linux generiert werden. Verwenden Sie dann ein Tool, um die Berechtigung für die ausführbare Datei in der TAR-Datei festzulegen, da tar * nix-Berechtigungen unterstützt.

Hier ist ein Ausschnitt, der zeigt, wie dies in einer pom.xml-Datei festgelegt wird. (Dieses Snippet richtet auch den Mac-App-Ordner ein und fügt den Archivdateinamen die Version hinzu): http://snipt.org/Aggid3

Hier ist eine Java-Klasse, die das Berechtigungsbit ausführt. Es erfordert Guava und Apache Commons Compress: http://snipt.org/Aggic1

Hier ist ein vorgefertigtes Glas ist die Abhängigkeiten einschließlich allen: https://mega.co.nz/#!WcNjyRjS!KE7tM1xYrt1l9JIguUAsrgpLe2V0NS1QIj_NvdAnm88

Ein Anwendungsbeispiel unter Verwendung des oben wäre: java -jar „My Product- gztperms.jar 0.0.1.201309091838-macosx.cocoa.x86.tar.gz "" Mein Produkt-Executable-0.0.1.201309091838-macosx.cocoa.x86.tar.gz "" Mein Produkt.app/Contents/MacOS/My Produkt "

Ich habe ein ziemlich triviales Ant-basiertes Post-Build-Skript, das ich von Jenkins ausführe, das die .gz-Datei findet und dieses Skript darauf ausführt Alles funktioniert nun über den Artefakt-Link.