gpt4 book ai didi

spring - 使用 Spring 从外部 jar Autowiring 类

转载 作者:行者123 更新时间:2023-12-04 08:35:45 24 4
gpt4 key购买 nike

我正在尝试使用 Spring 构建一个独立的应用程序(不在应用程序服务器内运行),但我面临以下问题:

我的独立应用程序(启用 spring)依赖于另一个项目(捆绑为 jar),其中包含 com.application.service 中的许多服务。 (用 @Service 注释)。

外部项目中没有spring相关的配置,独立的应用上下文很简单,只包含:
<context:component-scan base-package="com.application" />
这是依赖于无法获取的服务的类的示例:

@Service
public class StandaloneService {

@Autowired
private SomeService someService;

// ...
}
StandaloneService包含在独立应用程序中,而 SomeService在外部 jar 里。

错误 :
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)}

这是我如何创建 ApplicationContext并试图获得我的服务:
public static void main(String[] args) {

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

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

我如何构建独立应用程序:
<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>

我如何运行它(导致失败):
java -jar target/standalone.jar
奇怪的是,如果我以这种方式运行它,它会起作用:
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
谁能帮我弄清楚为什么 Spring 在第一种情况下看不到我的外部服务?

编辑

这是来自外部 jar 的 pom.xml :
<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>

最佳答案

三个月后,我现在有了这样的回应:
Annotation scan not scanning external jars in classpath

如接受的答案中所述,使用 时-jar 选项 -cp 选项被忽略。

以这种方式运行我的应用程序使它按预期工作!

java -cp target/lib/external.jar:target/standalone.jar package.Main

关于spring - 使用 Spring 从外部 jar Autowiring 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17705664/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com