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
将OSGi捆绑包的maven依赖项添加到Eclipse目标平台_Eclipse_Maven_Osgi_Tycho - Fatal编程技术网

将OSGi捆绑包的maven依赖项添加到Eclipse目标平台

将OSGi捆绑包的maven依赖项添加到Eclipse目标平台,eclipse,maven,osgi,tycho,Eclipse,Maven,Osgi,Tycho,我有一些OSGi捆绑包(简单的OSGi,没有eclipse依赖项)和一个maven构建,它使用pax runner在Knopflerfish服务器中启动它们 maven构建和启动捆绑包工作得非常好,但只能通过pax runner(mvn pax:provision) 对于调试bundle,最好直接从eclipse中启动它们,否则我的断点将不会触发(看起来很明显,因为pax:provision启动了不再绑定到eclipse的构建jar文件) MANIFEST.MF文件是以通常的maven方式构建的

我有一些OSGi捆绑包(简单的OSGi,没有eclipse依赖项)和一个maven构建,它使用pax runner在Knopflerfish服务器中启动它们

maven构建和启动捆绑包工作得非常好,但只能通过pax runner(
mvn pax:provision

对于调试bundle,最好直接从eclipse中启动它们,否则我的断点将不会触发(看起来很明显,因为pax:provision启动了不再绑定到eclipse的构建jar文件)

MANIFEST.MF文件是以通常的maven方式构建的,这意味着使用maven bundle插件。因此,直接从eclipse启动捆绑包失败了,因为eclipse平台错过了maven实现其maven魔力所需的所有外部OSGi捆绑包

因此,我正在寻找一种方法,以某种方式设置我的eclipse目标平台,以便自动包含来自maven的OSGi包,并且可以从IDE中访问这些包,以便在启动时解决这些约束

我检查了目标平台设置,但显然只能向其中添加特定的JAR和文件夹,而不能像使用整个本地maven存储库那样添加整个文件夹结构。如果我需要为每一个新的依赖项更新我的目标平台,这些依赖项会变得非常难看(我希望我可以像“将C:\Users\myprofile.m2\repository添加到目标平台”这样做,eclipse将只加载它需要的内容)

在研究过程中,我发现了EclipseTycho,但显然这只编译了一个用于构建捆绑包的目标平台,而不是用于从IDE中编译和启动捆绑包。接下来我找到了这个网站:这看起来正是我需要的。从文档中可以看出,这个插件能够获取从EclipseTycho编译的目标平台并将其写入文件。然后我就可以将这个文件导入到我的IDE中,并将其用作目标平台

我的问题是,插件退出时出现了一个我无法推断的错误(我打开了stacktraces以获得更完整的错误消息)

这是插件的配置:

        <plugin>
            <groupId>lt.velykis.maven</groupId>
            <artifactId>pde-target-maven-plugin</artifactId>
            <version>1.0.0</version>
            <executions>
                <execution>
                    <id>pde-target</id>
                    <goals>
                        <goal>add-pom-dependencies</goal>
                    </goals>
                    <configuration>
                        <baseDefinition>D:/platform.target</baseDefinition>
                        <outputFile>D:/platform-pde.target</outputFile>
                    </configuration>
                </execution>
            </executions>
        </plugin>

我想要的是关于如何正确配置插件的提示,或者我可以将maven依赖项捆绑包引入目标平台的任何其他方法,这样我就可以直接从eclipse启动捆绑包,而无需再次在eclipse首选项的深处维护依赖项。

您可以尝试运行PAX为测试容器定义vm选项。默认情况下,容器在单独的JVM中启动,您可以为其定义命令行选项。甚至您也会找到一个以调试模式启动测试的示例。只需定义suspend=y,您就有足够的时间将Eclipse与

还有一款适合Pax Runner的,你可以试试

编辑: 使用您在注释中发送给我的启动配置,您调试了maven JVM,而不是OSGI容器

很难找到
pax:provision
的文档。我尝试了
帮助:描述

C:\>mvn help:describe -Dplugin=org.ops4j:maven-pax-plugin:1.5 -Dgoal=provision -Ddetail
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-help-plugin:2.2:describe (default-cli) @ standalone-pom ---
[INFO] Mojo: 'pax:provision'
pax:provision
  Description: Provision all local and imported bundles onto the selected
    OSGi framework
      mvn pax:provision [-Dframework=felix|equinox|kf|concierge] [-Dprofiles=log,war,spring,...]

    If you don't have Pax-Runner in your local Maven repository this command
    will automatically attempt to download the latest release. It will then
    continue to use this locally installed version of Pax-Runner unless you add
    -U to force it to check online for a later release, or -Drunner=version to
    temporarily use a different version.
  Implementation: org.ops4j.pax.construct.lifecycle.ProvisionMojo
  Language: java

  Available parameters:

    args
      User property: args
      URL of file containing additional Pax-Runner arguments.

    deploy (Default: true)
      User property: deploy
      When true, start the OSGi framework and deploy the provisioned bundles.

    deployPoms
      User property: deployPoms
      Comma separated list of additional POMs with bundles as dependencies.

    deployURLs
      User property: deployURLs
      Comma separated list of additional bundle URLs to deploy.

    framework
      User property: framework
      Name of the OSGi framework to deploy onto.

    noDependencies
      User property: noDeps
      Ignore bundle dependencies when deploying project.

    profiles
      User property: profiles
      Comma separated list of additional Pax-Runner profiles to deploy.

    provision
      User property: provision
      A set of provision commands for Pax-Runner.

    runner (Default: RELEASE)
      User property: runner
      The version of Pax-Runner to use for provisioning.


[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.570s
[INFO] Finished at: Wed Feb 19 00:01:05 CET 2014
[INFO] Final Memory: 8M/109M
[INFO] ------------------------------------------------------------------------
看来:

  • 创建包含以下文本的文件:

    --vmOptions=-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=8888

  • 按如下方式运行您的构建:

    mvn pax:规定-标准=file:///c:/yourfilepath/thefilecontainingstuffabove.txt


  • 我没有试过,但它可以工作。挂起,端口8888,Eclipse远程调试:)

    我经常使用Apache Karaf进行远程调试。karaf还从maven存储库中加载捆绑包。 eclipse仍然会找到断点并触发它们。因此,同样的方法也适用于pax runner

    我要做的是导出KARAF_DEBUG=true并启动KARAF。这将触发典型的远程调试设置,pax runner也应该可以使用这些设置。然后,我从eclipse启动一个远程调试会话,只需将所有必需的开放eclipse项目添加到远程调试会话的源代码中。这几乎在所有时间都有效。有时我的断点也不会被触发,但很少,我也不知道为什么

    顺便说一句,Karaf还允许在运行时从本地maven repo更新捆绑包。因此,如果您更改了一个项目,只需在单个捆绑包项目上调用mvn clean install,在shell上执行“更新bundleid”,就可以继续使用捆绑包的新版本进行调试。当您有一个大项目,但调试时只处理一小部分时,这非常有用


    因此,要继续,您应该能够使用pax runner进行远程调试,而不会出现问题,看看apache karaf可能也很有趣。

    我尝试了远程调试,我的断点仍然没有触发-我想您可以调试pax直接启动的东西,但不是部署到由pax启动的osgi服务器上的包(但我可能在这一点上错了,这只是我提出的解释)。使用eclipse插件,我又遇到了同样的问题——它取决于OSGi启动配置,我又遇到了同样的编译器问题,因为maven依赖项无法解决。当使用eclipse进行远程调试时,您定义了一个要调试的项目。如果您将jar添加到调试配置的“类路径”中,其中包含具有断点的类,或者您调试的项目已经在其类路径上,应该触发断点。这是启动pax的maven build命令的设置:这是远程调试的设置:无论我使用suspend=y还是suspend=n,maven build都会侦听连接,调试器会连接,但不会触发我在指定项目中设置的断点。这就是为什么我开始寻找替代的解决方案,但当然,如果它能以这种方式工作也会很好。非常感谢,这很有效!然后,我对调试尝试失败的原因的假设是正确的,但我没有管理
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <?pde version="3.8"?><target name="OrchestratorPlatform" sequenceNumber="8">
    <locations>
    <location path="${eclipse_home}" type="Profile"/>
    </locations>
    <environment>
    <os>win32</os>
    <ws>win32</ws>
    <arch>x86_64</arch>
    <nl>en_US</nl>
    </environment>
    <launcherArgs>
    <vmArgs>-Dosgi.requiredJavaVersion=1.6 -Xms40m -Xmx512m</vmArgs>
    </launcherArgs>
    </target>
    
    C:\>mvn help:describe -Dplugin=org.ops4j:maven-pax-plugin:1.5 -Dgoal=provision -Ddetail
    [INFO] Scanning for projects...
    [INFO]
    [INFO] ------------------------------------------------------------------------
    [INFO] Building Maven Stub Project (No POM) 1
    [INFO] ------------------------------------------------------------------------
    [INFO]
    [INFO] --- maven-help-plugin:2.2:describe (default-cli) @ standalone-pom ---
    [INFO] Mojo: 'pax:provision'
    pax:provision
      Description: Provision all local and imported bundles onto the selected
        OSGi framework
          mvn pax:provision [-Dframework=felix|equinox|kf|concierge] [-Dprofiles=log,war,spring,...]
    
        If you don't have Pax-Runner in your local Maven repository this command
        will automatically attempt to download the latest release. It will then
        continue to use this locally installed version of Pax-Runner unless you add
        -U to force it to check online for a later release, or -Drunner=version to
        temporarily use a different version.
      Implementation: org.ops4j.pax.construct.lifecycle.ProvisionMojo
      Language: java
    
      Available parameters:
    
        args
          User property: args
          URL of file containing additional Pax-Runner arguments.
    
        deploy (Default: true)
          User property: deploy
          When true, start the OSGi framework and deploy the provisioned bundles.
    
        deployPoms
          User property: deployPoms
          Comma separated list of additional POMs with bundles as dependencies.
    
        deployURLs
          User property: deployURLs
          Comma separated list of additional bundle URLs to deploy.
    
        framework
          User property: framework
          Name of the OSGi framework to deploy onto.
    
        noDependencies
          User property: noDeps
          Ignore bundle dependencies when deploying project.
    
        profiles
          User property: profiles
          Comma separated list of additional Pax-Runner profiles to deploy.
    
        provision
          User property: provision
          A set of provision commands for Pax-Runner.
    
        runner (Default: RELEASE)
          User property: runner
          The version of Pax-Runner to use for provisioning.
    
    
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time: 1.570s
    [INFO] Finished at: Wed Feb 19 00:01:05 CET 2014
    [INFO] Final Memory: 8M/109M
    [INFO] ------------------------------------------------------------------------