Frage

Wir haben ein Multi-Modul mit Modulen bauen mit unterschiedlichen Technologien, wie Java und Flex. Ist es irgendwie möglich, verschiedene Profile zu aktivieren, basierend auf dem Modul, das derzeit erarbeitet wird?

Ich versuchte es mit einer Aktivierung wie

<profile>
  <id>flex</id>
  <activation>
    <file>
      <exists>${basedir}/src/main/flex</exists>
    </file>
  </activation>
  ...
</profile

Aber es hat nicht funktioniert, obwohl die Verwendung von $ {} basedir ist in der dokumentierten Maven Dokumentation (dies ist ein Fehler in Maven). Gibt es eine andere Möglichkeit, verschiedene Aktivierungen basierend auf dem aktuellen Modul zu haben? Oder hat Maven erlaubt nur ein Profil für alle Module zu aktivieren oder nicht?

War es hilfreich?

Lösung

Für diejenigen, die wie ich diese Frage der Suche nach Antworten zu lesen, dieser Anwendungsfall funktioniert nun in Maven 3.

Es gibt es einen Bug zu beeinflussen diese Funktion in frühen Versionen von 3 (siehe http: // jira .codehaus.org / browse / MNG-2363 ), aber es funktioniert für mich richtig Maven 3.0.4 verwendet wird.

Andere Tipps

Nach einiger mehr Forschung, die ich schließlich zu dem Schluss gekommen, dass dies aus zwei Gründen in der aktuellen Maven-Version nicht möglich ist (2.1.0):

  • Maven Profile nicht vererbt werden, so dass Sie nicht ein Profil in einem übergeordneten POM und aktivieren, dass bei einem Kind POM definieren können.
  • Ich habe keine Möglichkeit zu aktivieren, um ein Profil aus einem POM selbst gefunden. Die Aktivierung nicht mit $ arbeitet {basedir} und die Eigenschaft Aktivierungsantwort nur auf Systemeinstellungen, die über die Option -D global festgelegt sind.

In 2.2.1 werden Profile geerbt die $ {basedir} Problem ist immer noch da. Ich bin im gleichen Boot - ich brauche ein Profil aktivieren auf der Grundlage der Existenz einer Datei in einem bestimmten Projekt. baut Mein Kind individuell ganz gut (durch lokale Datei existance aktiviert geerbt Profil) laufen, aber wenn ich den Build von oben Eltern laufen, gelingt es ihnen nicht, weil die Datei nicht gefunden wird.

Im Hinblick auf dateibasierte Aktivierung, können Sie versuchen, $ {basedir} entfernen. Wir verwenden es wie folgt:

<activation>
   <file>
      <missing>target/jboss/conf/jboss-service.xml</missing>
   </file>
</activation>

Ich weiß nicht, ob das hilft, aber ich löste ein ähnliches Problem mit dem folgenden Ansatz:

  1. I erstellt und beschrieben das Profil in der übergeordneten POM, die activeByDefault=false hat. Der PluginManagement-Abschnitt enthält dann die Konfigurationen für verschiedene Plug-In.
  2. Die Kinder können dieses Profil wieder verwenden und setzen activeByDefault=true Dies macht das Profil aktiv, aber noch keine der Plugins aktiviert.
  3. Aber zum Glück der beschriebenen Plugin Konfigurationen stehen zur Verfügung. Sie können sie bei Kindern verwendet werden, indem sie in den Plugins-Abschnitt definieren. Sie geben einfach die gruppen- und die artifactID und setzen inherited=true für jedes Plugin Sie in den Kindern wiederverwendet werden soll.

Ich hoffe, das hilft. Es tut sie keinen Code-Schnipsel, einschließlich, aber ich hoffe, auch so die soutions verständlich ist.

Sie können eine Eigenschaft in jedem Modul festgelegt, dass Sie das Profil verwenden möchten, und dann „Objekt“ Aktivierung in Ihren Profilen verwenden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top