# 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.

is.autoload=true
javac.release=17
javac.compilerargs=-Xlint -Xlint:-serial
release.external/jdom2-2.0.6.1.jar=modules/ext/maven/jdom2-2.0.6.1.jar
release.external/maven-dependency-tree-2.2.jar=modules/ext/maven/maven-dependency-tree-2.2.jar
bundled.maven=apache-maven-3.9.16
extra.module.files=maven/
nbm.executable.files=maven/bin/mvn,maven/bin/mvnDebug,maven/bin/mvnyjp
extra.license.files=${cluster}/maven/LICENSE.txt,${cluster}/maven/NOTICE.txt
module.javadoc.packages=org.netbeans.modules.maven.embedder
javadoc.apichanges=${basedir}/apichanges.xml
javadoc.arch=${basedir}/arch.xml
jnlp.indirect.files=modules/ext/maven/rootpackage/default-report.xml,modules/ext/maven/settings.xml
# Will not be able to run bundled Maven, but embedder should work and should be able to specify external Maven:
jnlp.verify.excludes=maven/lib/ext/hazelcast/README.txt,\
  maven/lib/org.eclipse.sisu.plexus.license,\
  maven/lib/asm.license,\
  maven/boot/plexus-classworlds.license,\
  maven/NOTICE,\
  maven/lib/plexus-utils.license,\
  maven/bin/m2.conf,\
  maven/lib/ext/redisson/README.txt,\
  maven/README.txt,\
  maven/lib/slf4j-api.license,\
  maven/bin/mvnDebug.cmd,\
  maven/lib/ext/README.txt,\
  maven/conf/logging/simplelogger.properties,\
  maven/bin/mvn.cmd,\
  maven/bin/mvnDebug,\
  maven/lib/jansi-native/Windows/x86_64/jansi.dll,\
  maven/lib/jspecify.license,\
  maven/LICENSE,\
  maven/lib/jansi-2.4.2.jar,\
  maven/lib/commons-cli.license,\
  maven/lib/commons-codec.license,\
  maven/lib/aopalliance.license,\
  maven/lib/error_prone_annotations.license,\
  maven/lib/guice.license,\
  maven/lib/gson.license,\
  maven/lib/org.eclipse.sisu.inject.license,\
  maven/lib/jansi-native/Windows/arm64/jansi.dll,\
  maven/lib/failureaccess.license,\
  maven/lib/javax.annotation-api.license,\
  maven/lib/httpcore.license,\
  maven/lib/plexus-interpolation.license,\
  maven/lib/jcl-over-slf4j.license,\
  maven/lib/jansi-native/Windows/x86/jansi.dll,\
  maven/lib/plexus-cipher.license,\
  maven/lib/plexus-sec-dispatcher.license,\
  maven/conf/settings.xml,\
  maven/lib/jansi-native/README.txt,\
  maven/lib/jansi.license,\
  maven/bin/mvnyjp,\
  maven/bin/mvn,\
  maven/lib/guava.license,\
  maven/lib/plexus-component-annotations.license,\
  maven/lib/javax.inject.license,\
  maven/lib/httpclient.license,\
  maven/conf/toolchains.xml

 # gen-sigtest fails with:
# Fatal error: class junit.framework.TestCase not found
sigtest.gen.fail.on.error=false

test.config.stableBTD.includes=**/*Test.class
