2013-04-17 28 views
5

Ho riscontrato problemi nel funzionamento del plug-in SCR. Ho cercato quanto ho potuto trovare e ho trovato solo esempi che non erano simili alla struttura che dovevo usare. Frammenti di POM di seguito. Questi sono praticamente il default generato dall'archetipo del progetto CQ. Tutte le dipendenze ci sono, quindi probabilmente non è così. Ecco l'output del costruire:Maven SCR Plugin - Non genera la cartella OSGI-INF

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". 
SLF4J: Defaulting to no-operation (NOP) logger implementation 
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. 
[INFO] Scanning for projects... 
[INFO]                   
[INFO] ------------------------------------------------------------------------ 
[INFO] Building project Bundle 1.0-SNAPSHOT 
[INFO] ------------------------------------------------------------------------ 
[INFO] 
[INFO] --- maven-clean-plugin:2.4.1:clean (default-clean) @ project-bundle --- 
[INFO] Deleting C:\project-path\target 
[INFO] 
[INFO] --- maven-resources-plugin:2.5:resources (default-resources) @ bundle --- 
[debug] execute contextualize 
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent! 
[INFO] skip non existing resourceDirectory C:\project-path\src\main\resources 
[INFO] 
[INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ project-bundle --- 
[WARNING] File encoding has not been set, using platform encoding Cp1252, i.e. build is platform dependent! 
[INFO] Compiling 4 source files to C:\project-path\target\classes 
[INFO] 
[INFO] --- maven-scr-plugin:1.7.4:scr (generate-scr-descriptor) @ project-bundle --- 
[INFO] 
[INFO] --- maven-resources-plugin:2.5:testResources (default-testResources) @ project-bundle --- 
[debug] execute contextualize 
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent! 
[INFO] skip non existing resourceDirectory C:\project-path\src\test\resources 
[INFO] 
[INFO] --- maven-compiler-plugin:2.3.2:testCompile (default-testCompile) @ project-bundle --- 
[INFO] No sources to compile 
[INFO] 
[INFO] --- maven-surefire-plugin:9c6abc2:test (default-test) @ project-bundle --- 
[INFO] No tests to run. 
[INFO] 
[INFO] --- maven-bundle-plugin:2.3.6:bundle (default-bundle) @ project-bundle --- 
[INFO] 
[INFO] --- maven-install-plugin:2.4:install (default-install) @ project-bundle --- 
[INFO] Installing C:\project-path\target\project-bundle-1.0-SNAPSHOT.jar to C:\user-path\.m2\repository\com\project\cq\project-bundle\1.0-SNAPSHOT\project-bundle-1.0-SNAPSHOT.jar 
[INFO] Installing C:\project-path\pom.xml to C:\user-path\.m2\repository\com\project\cq\project-bundle\1.0-SNAPSHOT\project-bundle-1.0-SNAPSHOT.pom 
[INFO] 
[INFO] --- maven-bundle-plugin:2.3.6:install (default-install) @ project-bundle --- 
[INFO] Installing com/project/cq/project-bundle/1.0-SNAPSHOT/project-bundle-1.0-SNAPSHOT.jar 
[INFO] Writing OBR metadata 
[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD SUCCESS 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: 4.189s 
[INFO] Finished at: Wed Apr 17 10:29:17 CDT 2013 
[INFO] Final Memory: 15M/221M 
[INFO] ------------------------------------------------------------------------ 

La parte fondamentale della produzione è la [INFO] --- maven-scr-plugin:1.7.4:scr (generate-scr-descriptor) @ project-bundle ---. Sembra che non stia generando nulla anche se le annotazioni esistono sulla classe.

Parent POM Snippet:

<build> 
    <pluginManagement> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.felix</groupId> 
       <artifactId>maven-scr-plugin</artifactId> 
       <version>1.7.4</version> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.felix</groupId> 
       <artifactId>maven-bundle-plugin</artifactId> 
       <version>2.3.6</version> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <!-- use version 2.3.2 to have java 1.5 as the default --> 
       <configuration> 
        <source>${java.version}</source> 
        <target>${java.version}</target> 
       </configuration> 
       <version>2.3.2</version> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-resources-plugin</artifactId> 
       <version>2.5</version> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.sling</groupId> 
       <artifactId>maven-sling-plugin</artifactId> 
       <version>2.0.6</version> 
      </plugin> 
      <plugin> 
       <groupId>com.day.jcr.vault</groupId> 
       <artifactId>content-package-maven-plugin</artifactId> 
       <version>0.0.13</version> 
      </plugin> 
      <!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the 
       Maven build itself. --> 
      <plugin> 
       <groupId>org.eclipse.m2e</groupId> 
       <artifactId>lifecycle-mapping</artifactId> 
       <version>1.0.0</version> 
       <configuration> 
        <lifecycleMappingMetadata> 
         <pluginExecutions> 
          <pluginExecution> 
           <pluginExecutionFilter> 
            <groupId>org.apache.felix</groupId> 
            <artifactId>maven-scr-plugin</artifactId> 
            <versionRange>[1.7.4,)</versionRange> 
            <goals> 
             <goal>scr</goal> 
            </goals> 
           </pluginExecutionFilter> 
           <action> 
            <ignore /> 
           </action> 
          </pluginExecution> 
         </pluginExecutions> 
        </lifecycleMappingMetadata> 
       </configuration> 
      </plugin> 
     </plugins> 
    </pluginManagement> 
</build> 

Bambino POM Snippet:

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.felix</groupId> 
      <artifactId>maven-scr-plugin</artifactId> 
      <extensions>true</extensions> 
      <executions> 
       <execution> 
        <id>generate-scr-descriptor</id> 
        <goals> 
         <goal>scr</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
     <plugin> 
      <groupId>org.apache.felix</groupId> 
      <artifactId>maven-bundle-plugin</artifactId> 
      <extensions>true</extensions> 
      <configuration> 
       <instructions> 
        <Bundle-SymbolicName>project.project-bundle</Bundle-SymbolicName> 
       </instructions> 
      </configuration> 
     </plugin> 
     <plugin> 
      <groupId>org.apache.sling</groupId> 
      <artifactId>maven-sling-plugin</artifactId> 
      <configuration> 
       <slingUrl>http://${crx.host}:${crx.port}/apps/project/install</slingUrl> 
       <usePut>true</usePut> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

Codice in fase di costruzione:

package com.project.cq.examples.dictionaryservice.impl; 

import org.apache.felix.scr.annotations.Component; 
import org.apache.felix.scr.annotations.Properties; 
import org.apache.felix.scr.annotations.Property; 
import org.apache.felix.scr.annotations.Service; 
import org.osgi.service.component.ComponentContext; 

import com.project.cq.examples.dictionaryservice.DictionaryService; 

@Component(immediate = true, metatype = true, label = "Service Implementation", description = "The implementation for the Service") 
@Service 
public class DictionaryServiceServletImpl implements DictionaryService { 

    @Property(label = "Words", description = "The list of words.") 
    private static final String PROP_WORDS = "words"; 

    // The set of words 
    private String[] words; 
    private boolean active; 
    private boolean modified; 

    @Override 
    public boolean checkWord(String word) { 
     word = word.toLowerCase(); 

     // This is very inefficient 
     for (int i = 0; i < words.length; i++) { 
      if (words[i].equals(word)) { 
       return false; 
      } 
     } 
     return true; 
    } 

    protected void activate(ComponentContext context) { 
     active = true; 
     dictionary = (String[]) context.getProperties().get(
       PROP_WORDS); 
    } 

    protected void deactivate(ComponentContext context) { 
     dictionary = null; 
     active = false; 
    } 

    protected void modified(ComponentContext context) { 
     modified = true; 
     dictionary = (String[]) context.getProperties().get(
       PROP_WORDS); 
    } 
} 

Qualsiasi aiuto è molto apprezzato.

risposta

7

Sto indovinando che si sta utilizzando <packaging>bundle</packaging>, se è così ho ottenuto questo lavoro aggiornando Maven-scr-plugin per 1.9.0, con org.apache.felix.scr.annotations @ 1.7.0

Inserisco qui una tarball di una versione funzionante: https://dl.dropboxusercontent.com/u/2465717/com.stackoverflow.osgi.scr.tgz

Nota: è possibile abilitare la mappatura del ciclo di vita di Eclipse m2e - funziona bene (Juno SR2), generando errori di componenti SCR nella normale console Problemi. Modificare il action <ignore/> a:

<action> 
     <execute> 
       <runOnIncremental>true</runOnIncremental> 
       <runOnConfiguration>true</runOnConfiguration> 
     </execute> 
</action> 

Anche mentre la specifica indica il runtime SCR cercherà de sovraccarico/attivare metodi - come preferenza personale userei @Activate, @Deactive e @Modified sui rispettivi metodi per rendere il intento esplicito (in codice e XML generato). Ma ognuno per conto proprio.

+0

Utilizzando il più recente org.apache.felix.scr.annotations risolto nel mio caso. –

1

vi suggerisco

  • aggiornamento alla versione più recente del maven-scr-plugin
  • generare debug con -X, per esempio mvn -X compile
0

L'aggiornamento a 1.9.0 ha funzionato per me. Stiamo dicendo che il plugin v1.7.4 non genera descrittori. Perché dovrebbe essere così, non è questo il compito principale di maven-scr-plugin.