<?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/maven-v4_0_0.xsd">

  <modelVersion>4.0.0</modelVersion>

  <parent>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-parent</artifactId>
    <version>59</version>
  </parent>

  <groupId>bsf</groupId>
  <artifactId>bsf</artifactId>
  <version>2.5.0-SNAPSHOT</version>
  <name>Apache Commons BSF (Bean Scripting Framework)</name>
  <url>https://commons.apache.org/proper/commons-bsf</url>
  <packaging>jar</packaging>

  <inceptionYear>2002</inceptionYear>

  <properties>
    <project.build.sourceEncoding>ISO-8859-1</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
    <commons.componentid>bsf</commons.componentid>
    <commons.module.name>org.apache.commons.bsf</commons.module.name>
    <commons.release.version>2.5.0</commons.release.version>
    <commons.release.isDistModule>true</commons.release.isDistModule>
    <commons.rc.version>RC1</commons.rc.version>
    <commons.bc.version>2.4.0</commons.bc.version>

    <commons.jira.id>BSF</commons.jira.id>
    <commons.jira.pid>12310621</commons.jira.pid>
    <!-- Configuration properties for the OSGi maven-bundle-plugin -->
    <!-- TODO this is probably wrong -->
    <commons.osgi.symbolicName>bsf</commons.osgi.symbolicName>
    <commons.osgi.export>bsf.*;version=${project.version};-noimport:=true</commons.osgi.export>
    <commons.osgi.import>*</commons.osgi.import>
    <commons.osgi.dynamicImport />
    <commons.osgi.private />
  </properties>

  <distributionManagement>
    <site>
      <id>apache.website</id>
      <name>Apache Website</name>
      <url>scp://people.apache.org/www/commons.apache.org/${commons.componentid}/</url>
    </site>
  </distributionManagement>

  <licenses>
    <license>
      <name>Apache License, Version 2.0</name>
      <url>https://www.apache.org/licenses/LICENSE-2.0.txt</url>
      <distribution>repo</distribution>
    </license>
  </licenses>

  <organization>
    <name>The Apache Software Foundation</name>
    <url>https://www.apache.org/</url>
  </organization>

  <developers>
    <developer>
      <id>chuck</id>
      <name>Chuck Murcko</name>
      <email>chuck@topsail.org</email>
    </developer>
    <developer>
      <id>victor</id>
      <name>Victor Orlikowski</name>
      <email>victor.j.orlikowski@alumni.duke.edu</email>
    </developer>
    <developer>
      <id>rony</id>
      <name>Rony G. Flatscher</name>
      <email>rony@apache.org</email>
    </developer>
  </developers>

  <contributors>


  </contributors>

  <mailingLists>
    <mailingList>
      <name>BSF User List</name>
      <subscribe>
                user-subscribe@commons.apache.org
            </subscribe>
      <unsubscribe>
                user-unsubscribe@commons.apache.org
            </unsubscribe>
      <archive>
                https://mail-archives.apache.org/mod_mbox/commons-user/
            </archive>
    </mailingList>
    <mailingList>
      <name>BSF Developer List</name>
      <subscribe>dev-subscribe@commons.apache.org</subscribe>
      <unsubscribe>
                dev-unsubscribe@commons.apache.org
            </unsubscribe>
      <archive>
                https://mail-archives.apache.org/mod_mbox/commons-dev/
            </archive>
    </mailingList>
  </mailingLists>

  <issueManagement>
    <system>JIRA</system>
    <url>https://issues.apache.org/jira/browse/BSF</url>
  </issueManagement>

  <scm>
    <connection>scm:git:https://gitbox.apache.org/repos/asf/commons-bsf</connection>
    <developerConnection>scm:git:https://gitbox.apache.org/repos/asf/commons-bsf</developerConnection>
    <url>https://gitbox.apache.org/repos/asf/commons-bsf</url>
  </scm>

  <build>
    <!-- japicmp:cmp detected breaks, TODO fixes for javadoc:javadoc and checkstyles, and ... -->
    <defaultGoal>clean install apache-rat:check</defaultGoal>
    <plugins>
      <plugin>
        <!-- Temporary hack to allow compilation; remove when engine dependencies have been sorted -->
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <!-- engine dependencies have not yet been sorted -->
          <excludes>
            <exclude>org/apache/bsf/engines/netrexx/**</exclude>
          </excludes>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <executions>
          <execution>
            <goals>
              <goal>test-jar</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>com.github.spotbugs</groupId>
        <artifactId>spotbugs-maven-plugin</artifactId>
      </plugin>
    </plugins>
  </build>

  <reporting>
    <plugins>
      <!-- <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>jardiff-maven-plugin</artifactId> <configuration> <artifacts> 
        <artifact> <version>5.2</version> </artifact> <artifact> <groupId>bcel</groupId> <version>5.1</version> </artifact> </artifacts> 
        </configuration> </plugin> -->

    </plugins>
  </reporting>

  <dependencies>
    <dependency>
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.junit.vintage</groupId>
      <artifactId>junit-vintage-engine</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-lang3</artifactId>
      <version>3.12.0</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>commons-jexl</groupId>
      <artifactId>commons-jexl</artifactId>
      <version>1.1</version>
    </dependency>
    <dependency>
      <groupId>rhino</groupId>
      <artifactId>js</artifactId>
      <version>1.7R2</version>
    </dependency>
    <dependency>
      <groupId>jython</groupId>
      <artifactId>jython</artifactId>
      <version>2.1</version>
    </dependency>
    <dependency>
      <groupId>xalan</groupId>
      <artifactId>xalan</artifactId>
      <version>2.7.3</version>
    </dependency>
    <dependency>
      <groupId>jacl</groupId>
      <artifactId>jacl</artifactId>
      <version>1.2.6</version>
    </dependency>
    <dependency>
      <groupId>jacl</groupId>
      <artifactId>tcljava</artifactId>
      <version>1.2.6</version>
    </dependency>
  </dependencies>

</project>
