我的误解的根源涉及到我的类路径或类加载器,但是我将在OpenEJB的第一步中描述它。
我正在玩嵌入式OpenEJB,我遇到了一些奇怪的问题。 我使用maven来提取依赖关系,其中一个是包含我所有EJB的jar。
我的应用程序只是创建一个EJB容器,并尝试查找依赖项中包含的@Singleton
之一。
案例1)
当我从Netbeans启动main
时,它依赖于maven(exec-maven-plugin
)一切正常,我可以查找我的bean。
它使用以下命令行:
mvn -e "-Dexec.args=-classpath %classpath com.app.Main" -Dexec.executable=/usr/lib/jvm/java-7-openjdk/bin/java org.codehaus.mojo:exec-maven-plugin:1.2.1:exec
案例2)
如果我尝试将我的应用程序打包为具有特定文件夹lib
中的依赖项的jar,则找不到我的EJB。
以下是我的pom.xml的一部分,用于创建MANIFEST.MF并将我的依赖项放在lib
文件夹中。
<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.app.Main</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
我正在以这种方式运行应用程序:
java -jar target/app.jar
现在我想知道为什么案例1 我可以找到我的EJB而不是案例2 。
我添加了这段代码:
ClassLoader cl = ClassLoader.getSystemClassLoader();
URL[] urls = ((URLClassLoader)cl).getURLs();
for (URL url: urls){
System.out.println(url.getFile());
}
其中显示了案例1 所有依赖项,但仅显示案例2中的当前jar
从生成的jar中打开MANIFEST.MF
时,所有依赖项都会正确附加到Class-Path
。
有人可以向我澄清这个吗?