我已经创建了一个新的Spring Boot项目来学习如何包含我在外部jar文件中声明的bean。我创建了一个名为ContextApplication的文件,我想要做的就是显示Spring扫描的所有bean。请注意,此过程中不涉及单个xml文件。我喜欢这样,宁愿保持这种状态。但是,如果必须,我会在这一点上尝试任何事情。
ContextApplication:
$(document).ready(function(){
$("#print").one('click', function(ev){
$('#main').prepend('<center><button class="btn btn-primary btn-lg" id="print2">복사하기</button></center>')
$('.post').prepend('<input type="checkbox">');
$("#print2").on('click', function(){
var images ='';
$('li').each(function(){
var thisCheckFlag=$(this).children('input[type="checkbox"]').prop('checked');
if(thisCheckFlag){
images+='<img src ="'+$(this).find('img').attr('src')+'"><br>';
}
});
if(images){
var myWindow=window.open('','printWindow','width=800,height=800');
myWindow.document.write(
'<html><head><title>Print</title></head><body>'
+images+'</body></html>'
);
myWindow.focus();
myWindow.print();
}
else alert('먼저 선택하세요.');
});
ev.preventDefault();
});
});
当我运行它时,它确实有效并提供了已知bean的列表,但是,作为项目的一部分,我引用了一个jar文件jed-1.6.jar,其中包含其他类,标记为@组件或@Service。
的pom.xml:
package com.anypackage.jedcontext;
import java.util.Arrays;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
@SpringBootApplication
@ComponentScan(basePackages = {"com.tacticalenterprisesltd"})
public class JedcontextApplication {
public static void main(String[] args) {
SpringApplication.run(JedcontextApplication.class, args);
}
@Bean
public CommandLineRunner commandLineRunner(ApplicationContext ctx) {
return args -> {
System.out.println("Let's inspect the beans provided by Spring Boot:");
String[] beanNames = ctx.getBeanDefinitionNames();
Arrays.sort(beanNames);
for (String beanName : beanNames) {
System.out.println(beanName);
}
};
}
}
现在,当我运行应用程序时,jar文件中标记的类没有被扫描,也没有显示在控制台的列表中。即使我明确地提供了这个注释:@ComponentScan(basePackages = {&#34; com.tacticalenterprisesltd&#34;})在ContextApplication类上扫描jar文件中的所有内容。这将包括我希望的任何子包。所以,这里最底层的问题是,&#34;为什么不在jar文件中的类中读取Spring,我该怎么做呢?&#34;请指教。
答案 0 :(得分:1)
您应该使用includeSystemScope
参数将jar包含到SpringBoot应用程序的类路径中
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<includeSystemScope>true</includeSystemScope>
</configuration>
</plugin>
或者作为另一种选择,您可以将jar安装到本地maven存储库
mvn install:install-file -Dfile=path/to/jed-1.6.jar -DgroupId=com.tacticalenterprisesltd -DartifactId=jed -Dversion=1.6 -Dpackaging=jar
然后将其用作标准的maven依赖
<dependency>
<groupId>com.tacticalenterprisesltd</groupId>
<artifactId>jed</artifactId>
<version>1.6</version>
</dependency>