<?xml version="1.0" encoding="UTF-8"?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one
  or more contributor license agreements.  See the NOTICE file
  distributed with this work for additional information
  regarding copyright ownership.  The ASF licenses this file
  to you under the Apache License, Version 2.0 (the
  "License"); you may not use this file except in compliance
  with the License.  You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing,
  software distributed under the License is distributed on an
  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  KIND, either express or implied.  See the License for the
  specific language governing permissions and limitations
  under the License.
-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <parent>
    <artifactId>johnzon</artifactId>
    <groupId>org.apache.johnzon</groupId>
    <version>2.0.2-SNAPSHOT</version>
  </parent>
  <modelVersion>4.0.0</modelVersion>

  <artifactId>johnzon-core</artifactId>
  <name>Johnzon :: Core</name>
  <packaging>bundle</packaging>

  <properties>
    <staging.directory>${project.parent.reporting.outputDirectory}</staging.directory>
  </properties>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.felix</groupId>
        <artifactId>maven-bundle-plugin</artifactId>
        <configuration>
          <instructions>
            <Automatic-Module-Name>org.apache.johnzon.core</Automatic-Module-Name>
            <Require-Capability>osgi.extender;filter:="(osgi.extender=osgi.serviceloader.registrar)"</Require-Capability>
            <Provide-Capability>osgi.serviceloader;osgi.serviceloader=jakarta.json.spi.JsonProvider</Provide-Capability>
          </instructions>
        </configuration>
      </plugin>
    </plugins>
  </build>

<!-- avoid warnings at build time + this is not sufficient to run anyway (edit ts.jte)
  <profiles>
    <profile>
      <id>jakartaee-tck</id>

      <dependencies>
        <dependency>
          <groupId>org.eclipse.jakartaee.tck.local</groupId>
          <artifactId>tsharness</artifactId>
          <version>8.0-SNAPSHOT</version>
          <scope>system</scope>
          <systemPath>/opt/eclipse/javaeetck/lib/tsharness.jar</systemPath>
        </dependency>
        <dependency>
          <groupId>org.eclipse.jakartaee.tck.local</groupId>
          <artifactId>sonparsertests_appclient_vehicle_client</artifactId>
          <version>8.0-SNAPSHOT</version>
          <scope>system</scope>
          <systemPath>/opt/eclipse/javaeetck/dist/com/sun/ts/tests/jsonp/api/jsonparsertests/jsonparsertests_appclient_vehicle_client.jar</systemPath>
        </dependency>
      </dependencies>
    </profile>
  </profiles>
-->
</project>
