Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Spring从外部jar自动连接类_Spring_Maven_Classpath_Classloader - Fatal编程技术网

使用Spring从外部jar自动连接类

使用Spring从外部jar自动连接类,spring,maven,classpath,classloader,Spring,Maven,Classpath,Classloader,我试图用Spring构建一个独立的应用程序(不在应用程序服务器内部运行),我面临以下问题: 我的独立应用程序(支持spring)依赖于另一个项目(绑定为jar),该项目包含com.application.service(用@service注释)中的许多服务 外部项目中没有与spring相关的配置,独立应用程序上下文非常简单,它只包含: 下面是一个依赖于无法获取的服务的类的示例: @Service public class StandaloneService { @Autowired

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

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

外部项目中没有与spring相关的配置,独立应用程序上下文非常简单,它只包含:

下面是一个依赖于无法获取的服务的类的示例:

@Service
public class StandaloneService {

    @Autowired
    private SomeService someService;

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

错误:

原因:org.springframework.beans.factory.NoSuchBeanDefinitionException:找不到依赖项类型为[com.application.SomeService]的符合条件的bean:至少需要1个符合此依赖项autowire候选项条件的bean。依赖项注释:{@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文件的位置。应该是这样的


java-cp-jar target/standalone.jar三个月后,我现在得到了以下回复:

如公认答案中所述,当使用-jar选项时,-cp选项被忽略

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

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

我试过这样做:
java-cp-target/lib/external.jar-jar-target/standalone.jar
但是我仍然遇到同样的错误:如何在target/lib下创建外部jar文件?如果您使用eclipse创建外部jar,可能会有所帮助。我用pom.xml中用于创建外部jar的相关部分编辑了我的问题。我添加了
部分,但这并没有改变我的问题。我使用的不是eclipse而是netbeans,但我希望它能在任何IDE的范围之外工作。这就是spring的魔力。不断打破你的头,直到它流血。
java -cp target/lib/external.jar:target/standalone.jar package.Main