Java 在每个包中, 每个人都会尝试在中创建自己的log4j类实例 它们各自的类加载器。这可能会导致类加载器约束 违反问题或ClassCastException。如果你转换这些 依赖于OSGi捆绑包,则这些问题将不再存在 发生这是因为现在每个依赖项(比如log4j)都有 它是自己的类加载器,因此每当您的包A或包B想要 加载log4j类,它将从log4j bundle类加载器加载它

Java 在每个包中, 每个人都会尝试在中创建自己的log4j类实例 它们各自的类加载器。这可能会导致类加载器约束 违反问题或ClassCastException。如果你转换这些 依赖于OSGi捆绑包,则这些问题将不再存在 发生这是因为现在每个依赖项(比如log4j)都有 它是自己的类加载器,因此每当您的包A或包B想要 加载log4j类,它将从log4j bundle类加载器加载它,java,eclipse,jar,eclipse-rcp,eclipse-plugin,Java,Eclipse,Jar,Eclipse Rcp,Eclipse Plugin,有关更多信息,请参阅 关于自动化过程:我认为这是不可能的。由于您要手动将jar添加到lib文件夹中,因此应该手动将它们添加到类路径中(在运行时部分)。但是,在build.includes配置中定义lib/,在某种程度上应该会有所帮助。另外,可能会有帮助。请注意,不需要像通常那样“将jar添加到构建路径”!在运行时部分(您的第二个屏幕截图)中添加它将为您添加到构建路径中 另外,请注意,在您的屏幕截图上,“不在运行时配置部分的顶部 log4j作为OSGi捆绑包提供:。一般来说,如果您想要使用一个尚未

有关更多信息,请参阅

关于自动化过程:我认为这是不可能的。由于您要手动将jar添加到lib文件夹中,因此应该手动将它们添加到类路径中(在
运行时
部分)。但是,在
build.includes
配置中定义
lib/
,在某种程度上应该会有所帮助。另外,可能会有帮助。请注意,不需要像通常那样“将jar添加到构建路径”!在
运行时
部分(您的第二个屏幕截图)中添加它将为您添加到构建路径中

另外,请注意,在您的屏幕截图上,
不在
运行时
配置部分的顶部

  • log4j作为OSGi捆绑包提供:。一般来说,如果您想要使用一个尚未发布为OSGi包的第三方库,那么检查SpringSource是否有OSGi版本是值得的

  • 如果不是,你可以,正如亚历山大·加夫里洛夫所建议的那样

  • 最后,如果您真的想将其作为非OSGi捆绑包,则需要在
    MANIFEST.MF
    中设置
    捆绑包类路径:,lib/log4j.jar
    。当然,对于每个需要jar的插件和每个jar,以及在Eclipse中更改构建路径,都必须这样做

  • 一些更相关的问题和链接:

    我需要简化,我不想把罐子包装成捆之类的东西

    bundle是jar,在MANIFEST.MF中有一些额外的信息,仅此而已。OSGi(因此Eclipse)确实需要这些信息。最常用的库要么已经是Bundle(只需检查MANIFEST.MF中的
    Bundle SymbolicName
    ),要么作为Bundle提供。如果做不到这一点,只需为每个jar包装一次jar,而不必为每个依赖jar的插件更改构建路径、
    build.properties
    Bundle ClassPath

  • log4j作为OSGi捆绑包提供:。一般来说,如果您想要使用一个尚未发布为OSGi包的第三方库,那么检查SpringSource是否有OSGi版本是值得的

  • 如果不是,你可以,正如亚历山大·加夫里洛夫所建议的那样

  • 最后,如果您真的想将其作为非OSGi捆绑包,则需要在
    MANIFEST.MF
    中设置
    捆绑包类路径:,lib/log4j.jar
    。当然,对于每个需要jar的插件和每个jar,以及在Eclipse中更改构建路径,都必须这样做

  • 一些更相关的问题和链接:

    我需要简化,我不想把罐子包装成捆之类的东西


    bundle是jar,在MANIFEST.MF中有一些额外的信息,仅此而已。OSGi(因此Eclipse)确实需要这些信息。最常用的库要么已经是Bundle(只需检查MANIFEST.MF中的
    Bundle SymbolicName
    ),要么作为Bundle提供。如果做不到这一点,包装一个jar只需为每个jar做一次,而不必为每个依赖jar的插件更改构建路径、
    build.properties
    Bundle ClassPath

    我还没有
    产品。我也不明白为什么要先打包?我正在编写Java代码,为什么我不能使用JAR呢?感谢您为JAR编写单独的捆绑包,但我已经编写了一些代码,并希望将其打包成。它具有正常的常规依赖性。这些依赖于外部JAR和整个外部项目。Eclipse也允许在插件项目中添加这两个插件。但我不明白为什么Eclipse(1)允许它们,而(2)忽略它们。如果Eclipse不允许条目或使用条目,那就太好了。插件项目仍然是一个Eclipse项目,所以我相信这就是为什么它允许和其他项目一样的操作。此外,具有相同结构的项目可能以不同的方式构建,这取决于项目类型、构建者、方面等。所以,我不太确定,为什么它会让您如此困惑。每个项目都应该进行适当的配置,您只需要接受它;)若它允许将JAR添加到构建路径,那个么为什么它在构建时不使用JAR呢?因为构建过程是定制的,正如我前面提到的,这取决于许多因素。构建.war有一种方法,构建.ear和另一种方法,构建eclipse插件也不同。另外,构建路径只是为了让eclipse能够预编译您的项目,帮助您完成自动完成、内容助理、搜索等,它不是为不同类型的容器(web服务器、eclipse rcp框架)创建工件的信息。从来没有。即使使用Maven,您也可以为您的项目指定依赖项,然后根据需要单独配置工件的构建。我也不明白为什么要先打包?我正在编写Java代码,为什么我不能使用JAR呢?感谢您为JAR编写单独的捆绑包,但我已经编写了一些代码,并希望将其打包成。它具有正常的常规依赖性。这些依赖于外部JAR和整个外部项目。Eclipse也允许在插件项目中添加这两个插件。但我不明白为什么Eclipse(1)允许它们,而(2)忽略它们。如果Eclipse不允许条目或使用条目,那就太好了。毫无意义
    
    source.. = src/
    output.. = bin/
    bin.includes = plugin.xml,\
                   META-INF/,\
                   lib/,\
                   .
    
    source.. = src/
    output.. = bin/
    bin.includes = plugin.xml,\
                   META-INF/,\
                   lib/,\
                   .,\
                   lib/java-getopt-1.0.13.jar,\
                   lib/jsp-api-2.0.jar,\
                   lib/junit-4.11.jar,\
                   lib/log4j-1.2.17.jar,\
                   lib/rhino-1.7R4.jar,\
                   lib/servlet-api-6.0.36.jar,\
                   lib/tomcat-catalina-7.0.42.jar,\
                   lib/commons-logging-1.1.3.jar,\
                   lib/spring-beans-3.2.0.RELEASE.jar,\
                   lib/spring-core-3.2.0.RELEASE.jar,\
                   lib/miglayout-core-4.2.jar,\
                   lib/miglayout-swt-4.2.jar,\
                   conf/