Help Center/ CodeArts Build/ FAQs/ Maven Builds/ How Do I Deal With the Missing Package or Symbol?
Updated on 2024-10-10 GMT+08:00

How Do I Deal With the Missing Package or Symbol?

Symptoms

When Maven build task is executed, an error message is displayed, indicating that the package or symbol cannot be found. For example:

com/xxx/xxx/configserver/encryptor/xxx.java:[11,40] package com.sun.jersey.api.client.config does not exist

Cause Analysis

According to the log, the project references the com.sun.jersey.api.client.config package. However, the package cannot be found in the project or all parsed dependency packages. The problem lies either in the code or the environment/component:

Dependency Package Conflict

Sometimes, multiple versions of the same dependency exist in a project due to misoperation or third-party dependency imports. This will make the used version different from the required version, and as a result the specified package cannot be found. To solve this problem, perform the following steps:

  1. Use either of the following methods to check the version of the dependency package:

    1. Maven resolves dependency conflicts with the following strategies:
      • Nearest wins: For example, when building A, two dependencies exist: A > B > C > X 1.0 and A > D > X 2.0. Then X 2.0 will be used because the path from A to X through D is shorter.
      • First declaration wins: If two dependency versions are at the same depth, the first declaration wins.

    2. Use the Maven Dependency Plugin and run the mvn dependency:tree command in the build task.

  2. If the build fails because the dependency version is not the required version, import the required dependency at the outermost layer of the POM and try again.

    <dependencies>
    	<dependency>
    		<groupId></groupId>
    		<artifactId></artifactId>
    		<version></version>
    	</dependency>
    </dependencies>

Incorrect Dependency Range

In Maven, the dependency scope attribute specifies the visibility of a dependency. If the dependency scope is incorrectly specified, the dependency will be invalid during compilation. If the package in the dependency is used in the main code of the project, a compilation error will occur. Perform the following steps to solve the problem.

  1. Run the mvn dependency:tree command to view the dependency and dependency scope used by the project.
  2. Compare the dependency scope and the location where the dependency is used in the project.

    If the package in the dependency is used in the main code and the dependency must be valid during builds, the dependency scope must be one of the following options:

    • compile
    • provided
    • system: The location of the dependency file is specified in systemPath. The package must exist in the specified directory.

Dependency Package Uploaded Using GAV

  • When uploading a dependency package to self-hosted repos using the groupId, artifactId, and version (GAV), you only need to upload the JAR package. The POM file will be generated automatically, but only contains the identifiers of the dependency. The original <dependencies> details will be lost.
  • For example, assume that you use dependency A, which is built through project A, for building project D. Dependency A contains a third-party dependency, B. The dependency relationships are: D > A > B. When parsing dependency A, Maven will not be able to identify dependency B. As a result, project D cannot find contents in dependency B. In this case, perform the following steps:
  1. Check the dependency tree of project D and check whether the missing content is introduced by the POM file of project A. If yes, go to the next step. If no, try other solutions.
  2. Download the POM file of dependency A from the self-hosted repo of CodeArts Artifact and compare it with the POM file of project A. If the downloaded file does not contain the content introduced by B, go to the next step. Otherwise, try other solutions.
  3. Update the version of dependency A and upload it again using either of the following methods:

    • Build project A in CodeArts Build. Run the deploy command to upload dependency A to the private Maven repository. You can use the pipeline for automation.
    • Upload dependency A to the private Maven repository again. This time, upload the JAR packages and POM files separately.

  4. Build project D again.

Damaged Dependency Package

If the dependency package is damaged, some files in the package may be missing. As a result, the required dependency package can be found during a build, but the CLASS file or package cannot be found. The solution varies by the package type:

  • Third-party dependency package: Contact technical support.
  • Self-developed package (manually uploaded to the private Maven repository): Perform the following procedure.
    1. Download the dependency package from the private Maven repository.
    2. Decompress the package and check whether the content is normal.
    3. If the content of the dependency package is abnormal, perform either of the following steps:
      • If the package is provided by a third party and manually uploaded to the private Maven repository, ensure that the package file is correct and upload the package again. (Note that both the POM and JAR files must be uploaded.)
      • If the dependency package is built by yourself (on premises or in the cloud) and the code is correct, check whether the JAR package is incomplete because multiple build tasks run in parallel.