Autowiring Klassen aus externen jar mit Feder

Ich versuche zu bauen, ein standalone-Anwendung (nicht die Ausführung in einem application-server) mit dem Frühling und ich stehe vor dem folgenden problem :

Mein standalone-Anwendung (Frühjahr aktiviert) ist abhängig von einem anderen Projekt (im jar), die enthält eine Vielzahl von Dienstleistungen im com.application.service (Kommentiert mit @Service).

Gibt es keine Frühlings-bezogene Konfiguration in das externe Projekt-und der standalone-Anwendung Kontext ist sehr einfach, es enthält nur :

<context:component-scan base-package="com.application" />

Hier ist ein Beispiel einer Klasse, die hängt von einer Dienstleistung, die nicht angefordert werden kann :

@Service
public class StandaloneService {

    @Autowired
    private SomeService someService;

    //...
}

StandaloneService enthalten ist in der standalone-Anwendung, während SomeService ist in der externen jar.

Den Fehler :

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.application.SomeService] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

Hier ist, wie ich bin, Erstellung der ApplicationContext und versuchen, zu erwerben mein service :

public static void main(String[] args) {

    AbstractApplicationContext context = new ClassPathXmlApplicationContext(new String[] { "applicationContext.xml" });
    BeanFactory factory = (BeanFactory) context;

    StandaloneService standalone = factory.getBean(StandaloneService.class);
}

Wie Baue ich den standalone-Anwendung :

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>2.4</version>
    <configuration>
        <archive>
            <index>true</index>
            <manifest>
                <classpathPrefix>./lib/</classpathPrefix>
                <addClasspath>true</addClasspath>
                <mainClass>com.application.Main</mainClass>
            </manifest>
        </archive>
    </configuration>
</plugin>

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <executions>
        <execution>
            <id>copy-dependencies</id>
            <phase>package</phase>
            <goals>
                <goal>copy-dependencies</goal>
            </goals>
            <configuration>
                <outputDirectory>${project.build.directory}/lib</outputDirectory>
                <overWriteReleases>false</overWriteReleases>
                <overWriteSnapshots>false</overWriteSnapshots>
                <overWriteIfNewer>true</overWriteIfNewer>
            </configuration>
        </execution>
    </executions>
</plugin>

Wie ich bin, es läuft (führt zum Fehler) :

java -jar target/standalone.jar

Was merkwürdig ist ist, dass wenn ich es auf diese Weise funktioniert es :

mvn "-Dexec.args=-classpath %classpath com.application.Main" -Dexec.executable=/usr/lib/jvm/java-7-openjdk/bin/java -Dexec.classpathScope=runtime process-classes org.codehaus.mojo:exec-maven-plugin:1.2.1:exec

Wer könnte mir helfen herauszufinden, warum der Frühling nicht sehen kann, meine externe Dienstleistungen im ersten Fall ?

BEARBEITEN

Dies ist aus der pom.xml der externe jar :

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>2.4</version>
    <configuration>
        <archive>
            <manifest>
                <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                <addClasspath>true</addClasspath>
            </manifest>
        </archive>
    </configuration>
</plugin>
  • Wie erstellen Sie die externe jar-Datei unter target/lib? Wenn Sie mit eclipse zu erstellen, die externe jar, here und die here kann Ihnen dabei helfen.
  • Ich bearbeitet meine Frage mit den relevanten Teil des pom.xml erstellen Sie das externe jar. Ich fügte hinzu, die <configuration> Teil aber das ist nicht zu ändern alles, was zu meinem problem. Ich bin nicht mit eclipse sondern mit netbeans, aber ich will, dass das arbeiten aus einem beliebigen IDE-Bereich.
Schreibe einen Kommentar