Tools / Synopsys Detect Interview questions
Last updated
1. What is Synopsys Detect?
Synopsys Detect is a command-line scanning tool that finds open source components in your code, builds and containers, and sends them to a Black Duck server. There they are matched against known vulnerabilities, licenses and operational risk data.
It is a single Java (Spring Boot) application that bundles several scan methods behind one command: package manager detectors, the signature scanner, binary scan and Docker image inspection. You do not wire each of them up separately.
Detect is free to download and its source is public, but most of its value needs a Black Duck instance and license to receive the results. Since Synopsys' software integrity business became Black Duck Software in 2024, newer documentation may call it Black Duck Detect.
Take quiz
In a local SQLite file inside the scanned repo
In the Git history of the scanned repository
On a Black Duck server, as a project version BOM
Only unit testing and linting
Only dynamic testing of a running web app
Only license header formatting
Detectors, signature scan, binary scan and Docker inspection
2. What is the relationship between Detect and Black Duck?
Detect is the client-side collector; Black Duck is the server-side analysis platform. Detect gathers evidence of what is inside your software, and Black Duck turns that evidence into a Bill of Materials with vulnerability, license and policy information.
| Aspect | Detect | Black Duck server |
| Runs where | Developer machine or CI agent | Central server or hosted instance |
| Main job | Find components, produce BDIO and scan files | Match against the KnowledgeBase, store BOMs, evaluate policies |
| Knows about CVEs? | No, it only reports what it found | Yes, via NVD data and Black Duck Security Advisories (BDSA) |
| Typical output | BDIO, signature scan JSON, exit code | Project versions, BOMs, reports, policy status |
This split is why Detect cannot tell you a library is vulnerable on its own. Even the policy check that fails a build is just Detect asking the server for the verdict.
Take quiz
The Black Duck server, using its KnowledgeBase
The Detect JAR, using a bundled CVE list
The build tool, such as Maven or Gradle
A compiled copy of your application for dynamic testing
Evidence of components, such as BDIO files and signature scan results
A list of developer email addresses
3. What are the main scan tools in Detect?
Detect groups its capabilities into tools, which you control with detect.tools (include) and detect.tools.excluded (exclude).
| Tool | What it does |
| DETECTOR | Reads package manager files and builds a dependency graph |
| SIGNATURE_SCAN | Fingerprints files and folders to find vendored or copied code |
| BINARY_SCAN | Uploads a compiled artifact for binary analysis |
| DOCKER | Inspects a container image and its OS packages |
| BAZEL | Extracts dependencies from a Bazel workspace |
| IMPACT_ANALYSIS | Builds a call graph for Java vulnerability reachability |
By default the detector and signature scan tools run. The others need an explicit input, such as an image name or a binary path, or they are switched on with a property. Newer releases add further tools, so check --help for your version.
Take quiz
detect.tools
detect.scan.only
blackduck.tools.enabled
detect.run.mode
DOCKER
SIGNATURE_SCAN
BAZEL
IMPACT_ANALYSIS
4. How do you run Synopsys Detect?
There are two common ways: run the bootstrap script (detect.sh on Linux/macOS, a PowerShell equivalent on Windows), which downloads the latest Detect JAR and runs it, or download the JAR yourself and call java -jar.
At minimum you pass the server URL and an API token. Everything else has a default.
java -jar detect-<version>.jar \ --blackduck.url=https://blackduck.example.com \ --blackduck.api.token=$BD_TOKEN \ --detect.project.name=shop-api \ --detect.project.version.name=1.4.0
Run it from the root of the project. By default Detect scans the current directory, which you can change with detect.source.path.
Take quiz
A Git commit hash and a branch name
A Docker registry and a Jenkins job name
The Black Duck URL and an API token
detect.scan.root
blackduck.source.dir
detect.source.path
detect.project.path
5. What are the prerequisites for running Detect?
The requirements depend on what you scan, but a typical online run needs:
- A supported Java runtime (check the release notes, since the minimum version rises over time).
- Network access to the Black Duck URL, so Detect can authenticate, download the signature scanner and upload results.
- A valid API token for a user allowed to create or update projects.
- The relevant build tools on the PATH for detectors that need them, such as
mvn,gradleorpip. - Enough disk and memory. The signature scanner defaults to about 4 GB of heap.
Docker scanning additionally needs access to the image, either from a Docker daemon or as a tar file.
Take quiz
It invokes Maven to resolve the real dependency tree
Maven is only needed to send results to the server
Detect compiles the JAR with Maven before every run
Pushing code to the Git repository
Creating or updating projects and uploading scan results
Restarting the Black Duck services
6. What is a detector in Synopsys Detect?
A detector is the part of Detect that understands one package manager or build system, such as Maven, npm or NuGet, and turns its files into a dependency graph.
Each detector works in two checks. It is applicable when it finds its trigger file, for example pom.xml or package.json. It is extractable when everything it needs to run is present, such as the mvn executable or a lock file.
When both are true, Detect extracts the graph and writes it as a BDIO file. Detectors are identified by a type name such as MAVEN, GRADLE or NPM, which you use in include and exclude properties.
Take quiz
the Black Duck server confirms the project exists
it finds its trigger file, such as pom.xml or package.json
the code compiles without warnings
A Docker image of the project
A PDF risk report directly
A dependency graph written as BDIO
7. What is a signature scan in Detect?
A signature scan uses the Black Duck Signature Scanner to fingerprint the files and folders under your source path. The fingerprints, not your source code by default, are matched on the server against the Black Duck KnowledgeBase.
Its strength is finding open source that never appears in a manifest: a library copied into /vendor, a JAR checked into the repo, or code pasted from a public project. Package manager detectors cannot see these.
Detect downloads the scanner from the Black Duck server, runs it with its own bundled Java, and writes the scan output as JSON under the run directory before uploading it. Optional snippet matching goes further and looks for copied fragments inside files.
Take quiz
Dependencies declared in pom.xml
The version of Java used to build
Open source code copied into the repo without being declared in pom.xml
Fingerprints of files and folders
The complete source code uploaded in plain text
Only commit messages
8. What is BDIO?
BDIO stands for Black Duck Input/Output. It is a JSON-LD file format that describes a project, its dependencies and the relationships between them, using external identifiers that Black Duck understands.
Detectors write one BDIO document per extracted project. An identifier looks like a package manager coordinate, for example the Maven group, artifact and version of a library, plus the ecosystem it belongs to. That is how the server knows which component and version you mean.
Detect uploads the BDIO to create a code location and populate the BOM. In offline mode the files are only written to disk, so you can upload them later. Newer releases use the BDIO 2 variant of the format.
Take quiz
A project's dependency graph with component identifiers
The CPU profile of a running process
The Git branches of the repository
They replace the need for an API token forever
They can be uploaded to Black Duck later
They are executed by the build server
9. How do you configure Detect properties?
Detect is a Spring Boot application, so a property can be supplied in several places. When the same property appears more than once, the higher-priority source wins.
| Priority | Source | Example |
| Highest | Command-line argument | --detect.project.name=shop-api |
| Middle | Environment variable | DETECT_PROJECT_NAME=shop-api |
| Lowest | application.properties in the working or config folder |
detect.project.name=shop-api |
Environment variable names use upper case with underscores in place of dots. Run --help to list properties, and add a search term to filter them, which is the fastest way to find the right name.
Take quiz
application.properties
Whichever was written to disk last
The command-line argument
Neither; Detect stops with an error
detect-project-name
DETECT.PROJECT.NAME
detectProjectName
DETECT_PROJECT_NAME
10. What is a Black Duck API token used for in Detect?
The API token is how Detect authenticates to Black Duck without a username and password. You generate it from your user profile in the Black Duck UI and pass it as blackduck.api.token.
Detect uses it to obtain a bearer token for its REST calls: creating the project and version, uploading BDIO and scan files, polling for results and running the policy check.
The token carries the permissions of the user who created it. If scans fail with authorization errors, check that user's roles for the project before suspecting Detect. For pipelines, a dedicated service account with only the roles it needs is a cleaner choice than a personal token.
Take quiz
Full administrator rights always
Read-only access always
Those of the user who generated it
blackduck.api.token
detect.auth.key
blackduck.secret
detect.token.value
11. How do you set the project name and version in Detect?
Use detect.project.name and detect.project.version.name.
--detect.project.name="Shop API" --detect.project.version.name=2.1.0
If you leave them out, Detect tries to infer them. A detector may supply a name and version from the build file, for example from Maven coordinates. Otherwise the project name falls back to the source folder name and the version to a timestamp.
That fallback is a trap in CI: a timestamp version creates a new project version on every build. Set both explicitly using something stable such as the release number or branch name.
Take quiz
A timestamp
Always the value 1.0
The Git author name
Detect refuses to start without them
A new project version can be created on every build
The server deletes the old project each time
12. What is a code location in Black Duck?
A code location is the unit under which Black Duck stores one scan's results and maps them to a project version. Every BDIO upload and every signature scan creates one, identified by a name.
The name matters. Re-running a scan with the same code location name replaces the earlier results, which keeps the BOM current. A different name creates a new code location, and the old one stays mapped, so removed components can linger in the BOM.
Detect builds the name from the project, version, scan type and path. You can add detect.project.codelocation.prefix or .suffix to keep names unique across similar repos, and override it with detect.code.location.name.
Take quiz
A duplicate BOM is always added
The earlier results for that code location are replaced
The project is deleted
detect.scan.name.prefix
blackduck.location.prefix
detect.project.codelocation.prefix
13. What is a Bill of Materials (BOM) in Black Duck?
The BOM is the list of open source components found in a project version, built from every code location mapped to it.
For each component it shows the version, the license, known vulnerabilities (from NVD and Black Duck Security Advisories), operational risk such as project activity, and the match type: direct dependency, transitive dependency, file match or snippet match.
Policies are evaluated against the BOM, so the policy status of a project version comes from here. Teams can also adjust it by ignoring a false match or manually adding a component, and export it as a notices file or a risk report.
Take quiz
The developer's home address
The compiler flags used
Version, license, vulnerabilities and match type
The CI server hostname
Policies
Only the Detect version number
Only Git commit signatures
14. What is the Detect run directory?
Each Detect execution creates a run directory where it keeps its working files. By default this lives under ~/blackduck, in a runs folder with one sub-folder per execution.
Inside you will find the generated BDIO files, the signature scanner output and logs. Downloaded tools such as the scanner and inspectors are kept in a separate tools location, so they are reused between runs.
The base location is set with detect.output.path. By default Detect cleans up the run directory when it finishes, controlled by detect.cleanup. Set it to false, or use diagnostic mode, when you need to inspect the files after a failure.
Take quiz
detect.run.keep
blackduck.purge
detect.tmp.delete
detect.cleanup
To make the scan faster
To inspect BDIO and scan files after a failed run
To hide results from Black Duck
15. What is a binary scan in Detect?
A binary scan uploads a compiled artifact, such as a JAR, firmware image or installer, to Black Duck Binary Analysis, which identifies open source components inside it without needing source or manifests.
You enable it by pointing at the file with detect.binary.scan.file.path, or at several files with detect.binary.scan.file.name.patterns.
--detect.binary.scan.file.path=build/libs/shop-api.jar
It suits third-party deliverables and legacy builds where the source is unavailable. It normally requires a separate Binary Analysis entitlement on the server, so a scan can fail even when everything else works.
Take quiz
A Git URL only
A compiled artifact such as a JAR or firmware image
A running Docker container's memory dump
detect.binary.source
detect.binary.scan.file.path
blackduck.binary.file
detect.jar.input
16. How do you scan a Docker image with Detect?
Give Detect the image by name or as a tar file.
--detect.docker.image=myorg/shop-api:1.4.0 # or, without pulling from a daemon --detect.docker.tar=/tmp/shop-api.tar
Detect then runs the Docker Inspector, which reads the OS package database inside the image to list Linux packages, and also signature-scans the image's file system to catch application libraries and copied code.
The results land in Black Duck as a project version. If you do not pass a project name and version, they are typically derived from the image repository and tag. Remember that scanning a base image reports its vulnerabilities too, so decide whether you want those in the same BOM as your app.
Take quiz
detect.image.archive
detect.docker.tar
blackduck.docker.file
detect.tar.scan
The package database inside the image, such as dpkg, rpm or apk data
The Dockerfile comments only
The host machine's installed packages
17. What are the common Detect exit codes?
Detect returns an exit code that CI systems use to pass or fail the step. The commonly seen ones are:
| Code | Name | Meaning |
| 0 | SUCCESS | Run completed normally |
| 1 | FAILURE_BLACKDUCK_CONNECTIVITY | Could not reach or authenticate to Black Duck |
| 2 | FAILURE_TIMEOUT | A wait or operation timed out |
| 3 | FAILURE_POLICY_VIOLATION | Policy check failed at the chosen severity |
| 4 | FAILURE_PROXY_CONNECTIVITY | Proxy problem |
| 5 | FAILURE_DETECTOR | A detector failed |
| 6 | FAILURE_SCAN | A scan tool failed |
| 7 | FAILURE_CONFIGURATION | Invalid property values |
More codes exist for newer features, so check the documentation for your Detect version. Code 3 is the one teams usually want, since it is the intended way to break a build.
Take quiz
0
1
3
7
FAILURE_POLICY_VIOLATION
FAILURE_TIMEOUT
SUCCESS
FAILURE_CONFIGURATION
18. List the package managers Detect supports?
Detect covers most mainstream ecosystems through its detectors. The list grows with each release, but it includes:
- JVM: Maven, Gradle, Ivy, sbt
- JavaScript: npm, Yarn, pnpm
- Python: pip, Pipenv, Poetry, Conda
- .NET: NuGet (solutions, projects and package config files)
- Go, Rust, PHP: Go modules, Cargo, Composer
- Ruby, Swift, Mobile: Bundler/RubyGems, Swift Package Manager, CocoaPods
- Others: Conan, Dart/Pub, Hex, Clojure/Leiningen, Bitbake, CPAN and more
Treat this as a snapshot and confirm against the documentation for your version before promising coverage to a team.
Take quiz
Photoshop
Jira
Kubernetes
Cargo
A Stack Overflow answer from years ago
The IDE's font settings
The documentation for your Detect version
19. How do you set project phase and distribution in Detect?
These two properties record how the software is used, and Black Duck policies can key off them.
--detect.project.version.phase=RELEASED --detect.project.version.distribution=EXTERNAL
| Property | Values |
| detect.project.version.phase | PLANNING, DEVELOPMENT, PRERELEASE, RELEASED, DEPRECATED, ARCHIVED |
| detect.project.version.distribution | EXTERNAL, SAAS, INTERNAL, OPENSOURCE |
Distribution matters mostly for licenses. A copyleft license may be fine for INTERNAL use but a violation for EXTERNAL distribution, so setting this correctly changes the policy outcome. You can also set detect.project.tier to rank project priority.
In practice, set the phase from the pipeline stage, for example DEVELOPMENT on feature branches and RELEASED for tagged builds. Policies that only apply to released software will then ignore early branches, which keeps day-to-day noise down. If the values are not set, Black Duck uses its own defaults, so policies written around them may behave differently than you expect.
Take quiz
It changes the programming language Detect uses
It chooses which Java version runs
Some licenses are acceptable internally but not when distributed externally
PLANNING
EXTERNAL
ARCHIVED
DEPRECATED
20. How does Detect decide which detectors to run?
Detect walks the source directory, and for each folder it checks every detector for applicability (is the trigger file there?) and then extractability (can it actually run?).
flowchart TD
A["Visit folder"] --> B{Trigger file found?}
B -- No --> G["Go to next folder"]
B -- Yes --> C{Allowed by include/exclude?}
C -- No --> G
C -- Yes --> D{Tools and files present?}
D -- No --> E["Report not extractable"]
D -- Yes --> F["Extract dependency graph"]
F --> G
Several detectors can apply to one folder, for example Gradle and a lock file. Detect has built-in precedence rules, so a more reliable detector usually wins and lower ones are skipped for that folder. How deep the walk goes is set by detect.detector.search.depth, and what is allowed is shaped by the include and exclude type properties.
Take quiz
The tools and files it needs to run are present
The project has no vulnerabilities
It was installed from the Black Duck UI
Detect silently installs the tool from the internet
Detect reports it as not extractable
The BOM is deleted from the server
21. How does detector search depth work?
detect.detector.search.depth sets how many folder levels below the source path Detect inspects for detector trigger files. The default is 0, which means only the source folder itself.
That surprises people with a monorepo: a package.json three folders down is simply never looked at. Raise the depth to include it.
| Property | Effect |
| detect.detector.search.depth | How many levels deep to look |
| detect.detector.search.continue | Keep searching sub-folders even after a detector matched in a parent |
| detect.detector.search.exclusion.defaults | Skip common build and dependency folders such as .git and node_modules |
| detect.detector.search.exclusion.paths | Skip specific folders you name |
Deeper searches find more projects but also pick up test fixtures and samples, so pair a higher depth with exclusions.
Take quiz
10 levels
Unlimited
0, only the source folder
1 level above the source folder
detect.detector.search.keepgoing
detect.recursive.always
detect.depth.unlimited
detect.detector.search.continue
22. How do you exclude detectors or directories from Detect?
There are separate switches for tools, detector types and folders.
# skip whole tools --detect.tools.excluded=SIGNATURE_SCAN # skip specific package managers --detect.excluded.detector.types=NPM,PIP # or allow only some --detect.included.detector.types=MAVEN # skip folders during detector search --detect.detector.search.exclusion.paths=samples,test-fixtures
Use included when you want a strict allow-list, and excluded to remove a few noisy ones. Do not set both for the same run, as the combination is confusing to debug. For the signature scanner, folder exclusion has its own properties, covered separately.
A common real-world case is a repo with a Node-based docs site next to a Java service. Excluding NPM keeps the docs site out of the product BOM, while the Maven detector still runs normally. After changing exclusions, check the detector summary at the end of the run to confirm the right ones show as skipped rather than failed.
Take quiz
detect.skip.packages
blackduck.detector.off
detect.tools.excluded
detect.excluded.detector.types
When you want a strict allow-list of detectors
When you want to scan more folders
When you want to disable authentication
23. How do you fail a build on policy violations with Detect?
Set detect.policy.check.fail.on.severities to the policy severities that should fail the run.
--detect.policy.check.fail.on.severities=BLOCKER,CRITICAL
Valid values are BLOCKER, CRITICAL, MAJOR, MINOR, TRIVIAL, UNSPECIFIED, plus ALL and NONE. After uploading, Detect waits for the server to finish evaluating, asks for the policy status, and if a violated policy has one of the chosen severities it exits with code 3.
The policies themselves, and their severities, are defined in Black Duck, not in Detect. If a pipeline never fails, check that policies are assigned to the project and that the severity you listed actually matches one of them.
Start with BLOCKER,CRITICAL on a new rollout and tighten later, otherwise an existing backlog of findings can stop every team on day one. Note that failing the build only reflects the state of the BOM at scan time; a vulnerability published tomorrow will not fail yesterday's build.
Take quiz
In Black Duck, not in Detect
In the Jenkinsfile only
In the JVM options
0
3
5
9
24. What is the difference between Intelligent, Rapid and Stateless scans?
The scan mode, set with detect.blackduck.scan.mode, decides whether results are stored in Black Duck.
| Mode | Stored on server? | Typical use |
| INTELLIGENT (default) | Yes, full BOM and history | Release branches, nightly builds, audits |
| RAPID | No, returns policy violations only | Fast feedback on pull requests |
| STATELESS | No, ephemeral results across more scan types | Quick checks that also need signature or container results |
Rapid and Stateless trade depth for speed. You do not get a persistent BOM or the usual project history, so they complement intelligent scans rather than replace them. Which tools each non-persistent mode supports has widened between versions, so confirm against your Detect release.
Take quiz
RAPID
INTELLIGENT
STATELESS
OFFLINE
More detail, but much slower
It only works for Docker images
Faster feedback, but no persistent BOM on the server
25. What is the difference between a signature scan and a detector scan?
They look for open source in completely different ways, which is why Detect runs both by default.
| Aspect | Detector scan | Signature scan |
| Evidence | Manifests and lock files | Fingerprints of actual files |
| Finds | Declared direct and transitive dependencies | Vendored, copied or undeclared code |
| Precision | High, exact versions from the resolver | Probabilistic, can need review |
| Needs build tools? | Often yes | No |
| Speed | Usually quick | Slower on large trees |
A project that only declares dependencies is well covered by detectors. A project that pastes code or checks in JARs needs the signature scan. Use both, and exclude dependency folders from the signature scan so you do not count the same library twice.
Take quiz
Detector scan only
Neither can find it
Signature scan
Detector scan
Signature scan
Binary scan only
26. How does snippet matching work in Detect's signature scanner?
Normal signature matching asks whether a whole file or folder matches a known open source file. Snippet matching asks a harder question: does a fragment inside your file match open source code?
The scanner breaks files into pieces, hashes them, and the server compares those hashes against a snippet index. That is how pasted or lightly edited code can be caught even though the file as a whole is unique.
You control it with detect.blackduck.signature.scanner.snippet.matching. Its values include SNIPPET_MATCHING and FULL_SNIPPET_MATCHING, with _ONLY variants that skip regular file matching. The fuller modes are slower and noisier.
Snippet hits are probabilistic. Each one should be reviewed in Black Duck and confirmed or ignored, not accepted blindly.
Take quiz
A fragment of open source code pasted into an otherwise unique file
Dependencies declared in package.json
A missing semicolon
Accepted automatically as certain
Reviewed and confirmed or ignored, since they are probabilistic
Deleted from the server by Detect
27. How do you exclude files from a signature scan?
The signature scanner has its own exclusion properties, separate from detector exclusions.
# exclude by path pattern (folder names wrapped in slashes) --detect.blackduck.signature.scanner.exclusion.patterns=/test/,/docs/ # exclude by directory name --detect.blackduck.signature.scanner.exclusion.name.patterns=node_modules,vendor-sample # scan only chosen sub-folders --detect.blackduck.signature.scanner.paths=src,lib
Typical reasons to exclude: folders where a package manager already reports the dependencies (so they are not counted twice), test fixtures that contain deliberately old libraries, and large generated output that only slows the scan down.
Check the scan log afterwards to confirm the exclusions were applied as you intended.
If an exclusion seems to have no effect, the usual causes are a pattern missing its enclosing slashes, a typo in the folder name, or the path being matched relative to a different root than you assumed. Run a dry run with detect.blackduck.signature.scanner.dry.run=true to see what would be scanned without uploading anything.
Take quiz
Black Duck cannot read JavaScript
Detectors already report those dependencies, and scanning them slows the run and duplicates findings
It is required for the API token to work
detect.scan.include.only
detect.blackduck.signature.scanner.paths
blackduck.scan.folders
detect.source.subset
28. How does Detect handle multi-module projects?
For Maven or Gradle builds with several modules, the detector walks the module tree and records each module as a subproject of the root in the dependency graph.
By default each detector's output becomes its own code location, so a repo with Maven and npm parts produces separate ones. To see everything as a single combined BOM, set an aggregate name:
--detect.bom.aggregate.name=shop-platform
This merges the detector results into one aggregated BDIO instead of several. You can also trim the tree with properties such as detect.maven.excluded.modules or detect.gradle.excluded.projects, for example to leave out sample or test modules that should not count towards the product's BOM.
Take quiz
detect.merge.all
detect.bom.aggregate.name
blackduck.bom.single
detect.project.flatten
detect.sample.skip
blackduck.module.hide
detect.gradle.excluded.projects
detect.gradle.offline
29. How do you run Detect in offline mode?
Offline mode lets Detect do its collection work without contacting Black Duck.
--blackduck.offline.mode=true
Detect still runs detectors and produces BDIO files, and the signature scanner can run in a dry-run style that writes its output locally. Nothing is uploaded, so you collect the files from the run directory and import them into Black Duck later through the UI or API.
Features that need the server are unavailable: the policy check, waiting for results, and report generation. Also note the signature scanner normally comes from the server, so offline runs need it supplied locally with detect.blackduck.signature.scanner.offline.local.path.
A practical pattern is to run offline on build agents that have no route to Black Duck, archive the run output as a build artifact, and have a connected job upload it. This keeps scanning decoupled from network rules, at the price of losing immediate policy feedback on the build itself.
Take quiz
The policy check, since it needs the server
Generating BDIO files
Running detectors
Nothing, it is automatically synced
Upload the BDIO and scan files to Black Duck later
Commit them to the main branch
30. How do you use Detect in an air-gapped environment?
Air-gapped here means no internet access, usually with an internal Black Duck server still reachable. That is different from fully offline mode.
Normally Detect downloads helper tools at run time: inspectors for Gradle and NuGet, the Docker Inspector, and the signature scanner. In an air gap those downloads fail, so you supply them ahead of time:
- Download the Detect JAR and the air gap package from Black Duck on a connected machine.
- Copy them to the isolated network and unpack the inspectors.
- Point Detect at them with the relevant path properties, such as the signature scanner host URL or local path.
- Run Detect with
--blackduck.urlpointing at the internal server.
If even the internal server is unreachable, switch to offline mode and upload results later.
Take quiz
It cannot read pom.xml files
Its on-demand tool downloads, such as inspectors, fail
It loses the ability to start Java
They are identical settings
Offline mode can reach the internet but air-gapped cannot
Air-gapped still reaches an internal Black Duck server, offline does not reach any
31. How do you integrate Detect into a Jenkins pipeline?
You can use the Jenkins plugin for Detect, or simply call the bootstrap script from a shell step. The script route is portable and easy to read.
stage('Open Source Scan') { steps { withCredentials([string(credentialsId: 'bd-token', variable: 'BD_TOKEN')]) { sh '''#!/bin/bash bash <(curl -s -L $DETECT_SCRIPT_URL) \ --blackduck.url=https://blackduck.example.com \ --blackduck.api.token=$BD_TOKEN \ --detect.project.name=${JOB_NAME} \ --detect.project.version.name=${BRANCH_NAME} \ --detect.policy.check.fail.on.severities=BLOCKER,CRITICAL ''' } } }
Store the token as a Jenkins credential so it is masked in logs. Because the step returns Detect's exit code, a policy violation fails the stage automatically. Add a pinned Detect version so builds are repeatable.
Use the branch name as the version for multibranch pipelines, so each branch gets its own BOM. Consider running the stage only on pull requests and the main branch, since scanning every commit on every branch can overload the server and slow feedback.
Take quiz
Jenkins reads the Black Duck UI
The plugin deletes the workspace
Detect exits with a non-zero code, which the shell step returns
As a Jenkins credential bound with withCredentials
Hard-coded in the Jenkinsfile
In a public wiki page
32. How do you configure a proxy for Detect?
Detect needs the proxy for both Black Duck calls and tool downloads, and it uses the blackduck.proxy.* properties.
--blackduck.proxy.host=proxy.corp.example.com --blackduck.proxy.port=3128 --blackduck.proxy.username=svc-detect --blackduck.proxy.password=$PROXY_PASS --blackduck.proxy.ignored.hosts=blackduck.internal.example.com
For NTLM proxies add blackduck.proxy.ntlm.domain. Use the ignored-hosts property for an internal Black Duck server that should be reached directly.
Keep the password out of the command line where possible. Use the environment variable BLACKDUCK_PROXY_PASSWORD instead. A wrong proxy setting usually ends in a proxy connectivity failure, exit code 4.
To verify the settings, run a short scan with only the detector tool and read the connection lines at the top of the log. If the proxy needs a custom certificate for HTTPS inspection, that certificate must also be trusted by Java, otherwise you will see certificate errors that look like a connection problem rather than a proxy problem.
Take quiz
blackduck.proxy.skip
blackduck.proxy.ignored.hosts
detect.noproxy.list
blackduck.direct.hosts
Detect refuses command-line passwords
Command-line arguments can be visible in process lists and logs
Environment variables run faster
33. How do you generate risk and notices reports with Detect?
Detect can ask Black Duck to build reports once the scan has been processed.
# PDF risk report --detect.risk.report.pdf=true --detect.risk.report.pdf.path=./reports # open source notices file --detect.notices.report=true --detect.notices.report.path=./reports
The risk report summarizes vulnerabilities, license and operational risk. The notices report lists components and license text, which is what legal teams usually need for attribution.
Both depend on the server finishing its analysis, so Detect waits for results first. That makes the run longer, and these properties cannot work in offline mode.
Archive the generated files as build artifacts so each release has its own attribution file and risk summary. Keep the output path outside the scanned source folder, otherwise the next signature scan may pick up the report files themselves.
Take quiz
Network administrators
Legal teams who need license text for attribution
The build tool's compiler
Reports are generated by hand
Detect reruns the whole build
Detect must wait for the server to finish analysis
34. What is buildless mode in Detect?
Buildless mode tells detectors to read project files directly instead of running the build tool.
--detect.detector.buildless=true
A normal Maven scan runs Maven so it can resolve exact versions. In buildless mode Detect parses files such as pom.xml itself, so you do not need the toolchain, the repositories or even a working build.
The cost is accuracy. Declared versions may be property placeholders, imported BOMs may not be expanded, and transitive dependencies may be incomplete. Use buildless for quick scans, environments without the toolchain, or when the build is broken. For release gating, prefer full detectors.
A useful middle path is to run buildless on every pull request for speed, then run the full detector on the release branch, where accuracy matters. Compare the two BOMs once to learn how much your own projects differ between the modes.
Take quiz
Perfect transitive dependency accuracy
Automatic license negotiation
No need to run the build tool or its toolchain
Version and transitive dependency detail may be less accurate
It scans only Docker images
It requires a Binary Analysis license
35. What happens when Detect cannot find mvn for the Maven detector?
The detector is applicable, because it found pom.xml, but not extractable, because there is no Maven to run. Detect logs that fact in its detector summary and moves on without producing a BOM for that module.
That can look like a successful run with missing results, so make it fail loudly if the Maven scan matters:
--detect.required.detector.types=MAVEN
If a required detector does not run, Detect ends with a detector-required failure code instead of quietly succeeding.
To fix the cause, install Maven, add a mvnw wrapper to the repo, or point to it with detect.maven.path. If you cannot run Maven at all, switch to buildless mode.
Take quiz
detect.required.detector.types
detect.maven.mandatory
detect.fail.if.empty
blackduck.require.maven
Delete pom.xml
Add a Maven wrapper or set detect.maven.path
Disable the Black Duck server
36. How do the Maven and Gradle detectors resolve dependencies?
Both detectors ask the build tool itself, so they see the same dependency versions the build resolves, including transitive ones.
| Aspect | Maven | Gradle |
| Invokes | mvn or the mvnw wrapper |
gradle or gradlew |
| Mechanism | Resolves the Maven dependency tree for each module | Runs a Detect-supplied init script that collects resolved configurations |
| Choose what to include | detect.maven.included.scopes / excluded.scopes |
detect.gradle.included.configurations / excluded.configurations |
| Custom args | detect.maven.build.command |
detect.gradle.build.command |
Because the real tool runs, it needs network access to your artifact repositories, valid credentials in settings.xml or Gradle properties, and a project that builds. That is what makes the results accurate, and also why these detectors fail on broken builds.
Take quiz
They guess versions from file names
The real build tool resolves the dependency graph
They read only the README
Having too many comments in the code
Using a dark IDE theme
A broken build or unreachable artifact repository
37. How do you exclude test and dev dependencies from the BOM?
Test and development libraries are not shipped, so counting them inflates vulnerabilities. Each ecosystem has its own filter:
# Maven: drop scopes --detect.maven.excluded.scopes=test,provided # Gradle: keep only runtime configurations --detect.gradle.included.configurations=runtimeClasspath # npm: skip devDependencies --detect.npm.include.dev.dependencies=false
Pick one approach per ecosystem rather than mixing include and exclude. Be careful with provided scope in Maven: the app server supplies those libraries at runtime, so excluding them may hide real risk in the deployed system.
Rescan and compare the BOM afterwards to confirm that only non-shipped components disappeared.
Remember that dev tools can still end up in what you ship, for example a bundler plugin that injects code into a front-end build. If the output contains anything from a dev dependency, include that tool deliberately rather than relying on the blanket exclusion.
Take quiz
compile
runtime
test
import
detect.npm.skip.test=true
detect.dev.off=true
detect.npm.strict=false
detect.npm.include.dev.dependencies=false
38. How does Detect scan npm projects?
The npm detectors prefer lock files, because they record the exact resolved version of every direct and transitive package. In order of reliability they use package-lock.json, npm-shrinkwrap.json, and as a last resort package.json.
A package.json alone only gives version ranges such as ^4.17.0, so the result is less exact. Yarn projects use yarn.lock and pnpm projects use pnpm-lock.yaml.
No npm install is needed to parse a lock file, and node_modules is skipped by default in both detector search and signature scan. Commit your lock file, since without it your BOM will not match what you actually deploy.
Take quiz
It records exact resolved versions, including transitive ones
It is the only file npm can read
It contains the API token
Yes, always
No, it is skipped
Only on Windows
39. How do you scan a Python project with Detect?
Which detector runs depends on the files present.
| Files | Detector | Notes |
| requirements.txt, setup.py | PIP | Needs Python and pip, and dependencies installed in the active environment |
| Pipfile.lock | PIPENV | Reads the lock file |
| poetry.lock | POETRY | Reads the lock file |
For the pip detector, activate the project's virtual environment and run pip install -r requirements.txt first. The detector inspects what is installed, so an empty environment gives an empty BOM.
--detect.pip.requirements.path=requirements.txt --detect.pip.project.name=shop-worker
If both python and python3 exist, make sure Detect uses the one matching your project.
In CI, create the virtual environment and install dependencies as a step before Detect, and reuse that same environment for the scan. For projects with a lock file, the Pipenv or Poetry detectors are generally preferable because they do not depend on the machine's installed state.
Take quiz
pip detectors only read comments
It inspects what is installed in the active environment
Black Duck requires wheels
Pipfile.lock
poetry.lock
package-lock.json
go.sum
40. Explain the execution flow of a Detect run?
A run follows the same stages whatever the project.
flowchart TD A["Load properties and validate"] --> B["Connect to Black Duck"] B --> C["Create or find project and version"] C --> D["Run tools: detectors, signature scan, binary, docker"] D --> E["Write BDIO and scan files"] E --> F["Upload to Black Duck"] F --> G["Wait for server processing"] G --> H["Policy check and reports"] H --> I["Set exit code and clean up"]
- Configuration: properties from arguments, environment and files are merged and validated. A bad value ends here with the configuration failure code.
- Connection: Detect authenticates and downloads the signature scanner if needed.
- Tools run: each selected tool produces output files in the run directory.
- Upload and wait: the files are sent, and Detect waits when a policy check or report needs results.
- Finish: it prints a status summary, cleans up, and exits with the code that reflects the outcome.
The summary shows each detector's status, which makes it the first place to look when something is missing.
Take quiz
The policy check
Properties are loaded and validated
Reports are generated
Files are uploaded
When a policy check or report needs the results
Only when running offline
Never, it always exits immediately
41. Explain the internal working of Docker scanning in Detect?
Detect hands image scanning to the Docker Inspector, a helper it downloads on demand.
sequenceDiagram participant D as Detect participant I as Docker Inspector participant B as Black Duck D->>I: Image name or tar I->>I: Save image, extract layers I->>I: Read OS release and package database I->>D: BDIO for OS packages + squashed image D->>B: Upload BDIO and signature scan B-->>D: Project version BOM
The inspector obtains the image (from a daemon, a registry or your detect.docker.tar), unpacks the layers and identifies the Linux distribution from files such as /etc/os-release. It then reads the package database (dpkg, rpm or apk) to list installed OS packages.
Because OS packages do not cover application libraries, Detect also signature-scans the image's merged file system. The two sets of evidence combine in one project version. It is why an image BOM can include both distro packages and your own JARs.
Take quiz
From files such as /etc/os-release inside the image
From the image's tag name only
By asking the Docker registry for the author
To compress the image
To catch application libraries that OS package databases do not list
To replace the OS package scan entirely
42. How do you troubleshoot Detect failures with logs and diagnostics?
Work from the simplest evidence outward.
- Read the status summary at the end of the console output. It lists each detector's result and the overall exit code.
- Raise log detail with
--logging.level.detect=DEBUG(or TRACE) and rerun. - Keep the files by setting
--detect.cleanup=false, then inspect the BDIO and scan output in the run directory. - Use diagnostic mode with
--detect.diagnostic=true, which zips the run directory, logs and configuration into one archive for Black Duck support.detect.diagnostic.extendedgathers more. - Isolate the failing tool using
detect.tools, so you only rerun the part that broke.
Check the diagnostic zip for secrets before sharing it. Detect masks sensitive property values in its own output, but your build files may still contain private repository details.
Take quiz
A new Black Duck project
A zip of the run directory, logs and configuration for support
A faster scan
--logging.level.detect=DEBUG
--detect.verbose=max
--blackduck.debug=on
--detect.log=all
43. How do you troubleshoot FAILURE_BLACKDUCK_CONNECTIVITY in Detect?
Exit code 1 means Detect could not reach or authenticate to the server. Narrow the cause down in this order:
| Check | Symptom | Fix |
| URL correct and reachable | Timeout or unknown host | Test with curl from the same agent; remove any extra path from blackduck.url |
| Certificate trust | SSL handshake or PKIX errors | Import the server certificate into the Java truststore, or as a quick test use blackduck.trust.cert=true |
| Proxy | Works in a browser but not from CI | Set blackduck.proxy.* properties |
| Token | 401 or 403 responses | Regenerate the token and check the user's roles |
| Timeouts | Slow server or network | Raise blackduck.timeout |
Always run the test from the same machine that fails. Connectivity from your laptop proves nothing about a locked-down CI agent. Avoid leaving trust.cert on in production, since it skips validation.
Take quiz
A missing pom.xml
An invalid project name
A certificate the Java runtime does not trust
Network and proxy rules often differ between machines
Curl works only on CI agents
Detect reads your laptop's cookies
44. Why do stale or duplicate code locations appear in Black Duck?
A code location is keyed by its name, so anything that changes the name creates a new one while the old one stays mapped to the project version. Components you removed then keep appearing in the BOM.
Common triggers:
- Using a changing project version name, such as a timestamp or build number, in the code location name.
- Scanning from a different folder or agent path, which changes the generated name.
- Renaming a repository or branch without updating the Detect properties.
To fix it, use stable names with detect.project.codelocation.prefix or .suffix, or fix the name directly with detect.code.location.name. Setting detect.project.codelocation.unmap=true unmaps older code locations from the version during a scan, and unwanted ones can be deleted in the UI.
Take quiz
Its name
The Git branch only
The size of the BDIO file
Deletes the whole Black Duck project
Unmaps older code locations from the project version during the scan
Disables the signature scan
45. How can you optimize Detect scan time?
Most of the time goes to the signature scan, build-tool resolution and waiting on the server, so focus on those.
- Trim the signature scan: exclude dependency, test and generated folders, or limit it to specific paths.
- Run only the tools you need:
--detect.tools=DETECTORis much faster for a quick check. - Avoid re-downloading: reuse the tools folder between runs, or set a local scanner with
detect.blackduck.signature.scanner.local.path. - Use buildless mode where exact transitive accuracy is not needed.
- Use Rapid or Stateless scans for pull requests so you skip the full BOM processing.
- Do not wait unnecessarily: keep
detect.wait.for.resultsoff unless you need the policy result. - Tune parallelism and memory: the scanner exposes parallel processor and memory properties.
Measure before and after on your own repo, as the biggest win depends on whether the tree is mostly vendored files or mostly declared dependencies.
Take quiz
Scanning with more folders included
Running only the detector tool, or using a Rapid scan
Enabling full snippet matching
To bypass authentication
To change the project name
To avoid downloading the scanner from the server on each run
46. What is vulnerability impact analysis in Detect?
Vulnerability impact analysis checks whether your Java code actually calls the vulnerable part of a library, not just whether the library is present. It helps you separate reachable vulnerabilities from theoretical ones.
When enabled with detect.impact.analysis.enabled=true, Detect builds a call graph from your compiled classes and uploads it. Black Duck compares it with the vulnerable methods named in its Security Advisories and marks each matching vulnerability as reachable or not.
Some points to remember:
- It supports Java projects only.
- It needs compiled classes, so run it after the build, not before.
- It depends on advisory data and a suitable license on the server.
Treat "not reachable" as a way to prioritize fixes, not as permission to ignore a vulnerability forever, since code paths change.
Take quiz
How many developers use the library
Which license the library has
Whether your code calls the vulnerable method of a library
Compiled Java classes
Only a README file
A running web server
47. Why should you pin the Detect version in CI pipelines?
The bootstrap script downloads the latest Detect release by default. A new release can change defaults, deprecate or rename properties, or raise the minimum Java version, so a pipeline that worked yesterday can fail today without any change on your side.
Pin the version with an environment variable the script reads:
export DETECT_LATEST_RELEASE_VERSION=<version>
Pinning gives you repeatable results, which matters when a BOM or policy outcome has to be explained later. It also lets you cache the JAR in a download folder instead of fetching it on every run.
Upgrade deliberately: read the release notes, try the new version on one pipeline first, and compare the results before rolling it out. Also confirm the version is compatible with your Black Duck server release.
Take quiz
It downloads the latest Detect release
It refuses to run
It uses the oldest cached release
Faster Black Duck servers
Repeatable results across builds
Automatic policy exemptions
48. How do you pass the Black Duck API token securely in CI?
Treat the token like a password and keep it out of source control and logs.
- Store it in the CI system's secret store: Jenkins credentials, GitHub Actions secrets, or Azure DevOps variable groups.
- Pass it through the environment variable
BLACKDUCK_API_TOKENrather than as a command-line argument, since arguments can show up in process lists and shell traces. - Create a dedicated service account with only the roles scanning needs, instead of using a personal token.
- Rotate it on a schedule and revoke it when a pipeline is retired.
export BLACKDUCK_API_TOKEN="$BD_TOKEN_FROM_SECRET_STORE" ./detect.sh --blackduck.url=https://blackduck.example.com
Detect masks sensitive values in its configuration output, but build scripts that echo variables can still leak them. Avoid set -x around that step.
Take quiz
Environment variables make Detect run faster
Arguments can be exposed in process lists and logs
Detect ignores arguments for tokens
A shared admin account
No token at all
A dedicated service account with minimal roles
49. How do you reduce false positives from snippet matches?
Snippet matches are probabilistic, so some noise is expected. Reduce it in layers.
- Scan less noise: exclude test fixtures, generated code and third-party folders that detectors already cover.
- Pick a lighter matching mode: the broader modes of
detect.blackduck.signature.scanner.snippet.matchingfind more but also raise false hits. - Review in Black Duck: open the Source tab, compare the matched file with the open source original, and either confirm the match or ignore it.
- Record the decision: ignored matches stay ignored on later scans of the same project version, so the review effort is not repeated.
- Check the license and component: a match to a tiny, generic function is often not meaningful, while a match to a large block usually is.
Keep a short team rule for what counts as a confirmed match, so reviews stay consistent between people.
Take quiz
Delete the repository
Disable all policies
Ignore it in Black Duck so it stays ignored on later scans
A broader mode such as FULL_SNIPPET_MATCHING
Excluding the test folder
Using a pinned Detect version
50. When would you choose Rapid scan for pull requests?
Use Rapid scan when you want quick feedback on a pull request and do not need a stored BOM. It returns policy violations for the dependencies found, and nothing is kept as a project version.
--detect.blackduck.scan.mode=RAPID --detect.blackduck.rapid.compare.mode=BOM_COMPARE --detect.policy.check.fail.on.severities=BLOCKER,CRITICAL
The compare mode decides what is reported. ALL lists every violation found, while BOM_COMPARE reports only violations that are new relative to the existing project BOM, which stops developers being blamed for old issues.
Pair it with Intelligent scans on main or release branches, so the persistent BOM, history and reports stay up to date. If a PR check must also include signature or container results, look at Stateless mode, and confirm what your Detect version supports.