# 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.source=1.8
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.5
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/NOTICE,maven/bin/mvnDebug,maven/bin/m2.conf,maven/LICENSE,maven/README.txt,maven/conf/settings.xml,maven/bin/mvnyjp,maven/bin/mvn,maven/bin/mvn.bat,maven/bin/mvnDebug.bat,maven/lib/ext/README.txt, maven/lib/maven-settings-builder.license, maven/lib/org.eclipse.sisu.inject.license, maven/lib/wagon-http.license, maven/lib/maven-compat.license, maven/lib/org.eclipse.sisu.plexus.license, maven/lib/maven-artifact.license, maven/lib/maven-settings.license, maven/lib/maven-model.license, maven/lib/maven-embedder.license, maven/lib/maven-builder-support.license, maven/lib/aether-util.license, maven/lib/maven-model-builder.license, maven/lib/wagon-provider-api.license, maven/lib/wagon-file.license, maven/lib/slf4j-api.license, maven/lib/aether-impl.license, maven/lib/aether-transport-wagon.license, maven/lib/plexus-cipher.license, maven/bin/mvnDebug.cmd, maven/conf/logging/simplelogger.properties, maven/lib/plexus-sec-dispatcher.license, maven/bin/mvn.cmd, maven/lib/maven-aether-provider.license, maven/lib/aether-api.license, maven/lib/cdi-api.license, maven/lib/aether-spi.license, maven/lib/commons-lang3.license, maven/lib/jsr250-api.license, maven/lib/jsoup.license, maven/lib/maven-repository-metadata.license, maven/lib/wagon-http-shared.license, maven/lib/maven-core.license, maven/lib/maven-plugin-api.license, maven/lib/aether-connector-basic.license, maven/lib/slf4j-simple.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
