问:
cannot access jakart.servlet.filter in java maven project
Getting the error cannot access jakarta.servlet.Filter when running mvn clean install and getting
class file for jakarta.servlet.Filter not found when trying to run. This seems to have started after moving from javax to jakarta, including updating my classes to use the jakarta namespace instead of the javax namespace, EXCEPT for in the case of javax.servlet, which can't be replaced with jakarta.servlet in any class because it's not found. I assume this is because mvn clean install never finishes due to the error?

${jackson.Version} is 2.14.0-rc1 and ${springVersion} is 2.7.5

NOTE: the spring-boot-starter-web dependency is already present and does not resolve the issue.

```<code><dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-annotations</artifactId>
                <version>${jackson.Version}</version>
            </dependency>
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-core</artifactId>
                <version>${jackson.Version}</version>
            </dependency>
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
                <version>${jackson.Version}</version>
            </dependency>
            <dependency>
                <groupId>com.fasterxml.jackson.module</groupId>
                <artifactId>jackson-modules-java8</artifactId>
                <version>${jackson.Version}</version>
                <type>pom</type>
                <scope>runtime</scope>
            </dependency>
            <dependency>
                <groupId>com.lmax</groupId>
                <artifactId>disruptor</artifactId>
                <version>3.4.4</version>
            </dependency>
            <dependency>
                <groupId>com.vlkan.log4j2</groupId>
                <artifactId>log4j2-logstash-layout</artifactId>
                <version>1.0.5</version>
            </dependency>
            <dependency>
                <groupId>jakarta.xml.bind</groupId>
                <artifactId>jakarta.xml.bind-api</artifactId>
                <version>4.0.0</version>
            </dependency>
            <dependency>
                <groupId>jakarta.servlet</groupId>
                <artifactId>jakarta.servlet-api</artifactId>
                <version>4.0.4</version>
            </dependency>
            <dependency>
                <groupId>jakarta.validation</groupId>
                <artifactId>jakarta.validation-api</artifactId>
                <version>3.0.2</version>
            </dependency>
            <dependency>
                <groupId>jakarta.annotation</groupId>
                <artifactId>ca-parent</artifactId>
                <version>1.3.5</version>
            </dependency>
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-csv</artifactId>
                <version>1.9.0</version>
            </dependency>
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-text</artifactId>
                <version>1.10.0</version>
            </dependency>
            <dependency>
                <groupId>org.apache.httpcomponents</groupId>
                <artifactId>httpclient</artifactId>
                <version>4.5.13</version>
            </dependency>
            <dependency>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-1.2-api</artifactId>
                <version>${log4j.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-api</artifactId>
                <version>${log4j.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-core</artifactId>
                <version>${log4j.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-jcl</artifactId>
                <version>${log4j.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-jul</artifactId>
                <version>${log4j.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-slf4j-impl</artifactId>
                <version>${log4j.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>3.4.0</version>
            </dependency>
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi</artifactId>
                <version>5.2.2</version>
            </dependency>
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi-ooxml</artifactId>
                <version>5.2.2</version>
            </dependency>
            <dependency>
                <groupId>org.apache.tomcat.embed</groupId>
                <artifactId>tomcat-embed-core</artifactId>
                <version>9.0.68</version>
            </dependency>
            <dependency>
                <groupId>org.glassfish.jaxb</groupId>
                <artifactId>jaxb-runtime</artifactId>
                <version>2.3.6</version>
            </dependency>
            <dependency>
                <groupId>org.javers</groupId>
                <artifactId>javers-spring-boot-starter-mongo</artifactId>
                <version>6.6.5</version>
            </dependency>
            <dependency>
                <groupId>org.jeasy</groupId>
                <artifactId>easy-rules-core</artifactId>
                <version>4.1.0</version>
            </dependency>
            <dependency>
                <groupId>org.jeasy</groupId>
                <artifactId>easy-rules-support</artifactId>
                <version>4.1.0</version>
            </dependency>
            <dependency>
                <groupId>org.springdoc</groupId>
                <artifactId>springdoc-openapi-ui</artifactId>
                <version>1.6.6</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-actuator</artifactId>
                <version>${springVersion}</version>
                <exclusions>
                    <exclusion>
                        <artifactId>spring-boot-starter-logging</artifactId>
                        <groupId>org.springframework.boot</groupId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-cache</artifactId>
                <version>${springVersion}</version>
                <exclusions>
                    <exclusion>
                        <artifactId>spring-boot-starter-logging</artifactId>
                        <groupId>org.springframework.boot</groupId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-log4j2</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-mongodb</artifactId>
                <version>${springVersion}</version>
                <exclusions>
                    <exclusion>
                        <artifactId>spring-boot-starter-logging</artifactId>
                        <groupId>org.springframework.boot</groupId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
                <version>${springVersion}</version>
                <exclusions>
                    <exclusion>
                        <artifactId>spring-boot-starter-logging</artifactId>
                        <groupId>org.springframework.boot</groupId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-validation</artifactId>
                <version>${springVersion}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web-services</artifactId>
                <version>${springVersion}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.security</groupId>
                <artifactId>spring-security-config</artifactId>
                <version>${spring.security.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.security</groupId>
                <artifactId>spring-security-core</artifactId>
                <version>${spring.security.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.security</groupId>
                <artifactId>spring-security-web</artifactId>
                <version>${spring.security.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-web</artifactId>
                <version>6.0.0</version>
            </dependency>
            <dependency>
                <groupId>org.yaml</groupId>
                <artifactId>snakeyaml</artifactId>
                <version>1.33</version>
            </dependency>
            <dependency>
                <groupId>com.example.pdp.test</groupId>
                <artifactId>testing-utils-common-spring</artifactId>
                <version>2.0.0</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>com.github.stefanbirkner</groupId>
                <artifactId>system-rules</artifactId>
                <version>1.19.0</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>io.cucumber</groupId>
                <artifactId>cucumber-java</artifactId>
                <version>6.11.0</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>io.cucumber</groupId>
                <artifactId>cucumber-junit</artifactId>
                <version>6.11.0</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>io.cucumber</groupId>
                <artifactId>cucumber-spring</artifactId>
                <version>6.11.0</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.junit.vintage</groupId>
                <artifactId>junit-vintage-engine</artifactId>
                <version>5.8.2</version>
                <scope>test</scope>
                <exclusions>
                    <exclusion>
                        <groupId>org.hamcrest</groupId>
                        <artifactId>hamcrest-core</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <version>${springVersion}</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.security</groupId>
                <artifactId>spring-security-test</artifactId>
                <version>${spring.security.version}</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>pl.project13.maven</groupId>
                <artifactId>git-commit-id-plugin</artifactId>
                <version>4.0.5</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
</code>```

Here's my plugin section:

```<code>       <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-enforcer-plugin</artifactId>
                <executions>
                    <execution>
                        <id>enforce-versions</id>
                        <goals>
                            <goal>enforce</goal>
                        </goals>
                        <configuration>
                            <rules>
                                <requireMavenVersion>
                                    <version>3.3.9</version>
                                </requireMavenVersion>
                                <requireJavaVersion>
                                    <version>1.11</version>
                                </requireJavaVersion>
                            </rules>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jxr-plugin</artifactId>
                <configuration>
                    <destDir>${project.build.directory}/site/sourceRefs</destDir>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>jxr</goal>
                            <goal>test-jxr</goal>
                            <goal>aggregate</goal>
                            <goal>test-aggregate</goal>
                        </goals>
                        <phase>initialize</phase>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-pmd-plugin</artifactId>
                <executions>
                    <execution>
                        <phase>compile</phase>
                        <goals>
                            <goal>pmd</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <xrefLocation>${project.build.directory}/site/sourceRefs</xrefLocation>
                    <aggregate>true</aggregate>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-javadoc-plugin</artifactId>
                <configuration>
                    <show>private</show>
                    <nohelp>true</nohelp>
                    <failOnError>true</failOnError>
                    <sourceFileExcludes>
                        <exclude>**/idq/**</exclude>
                    </sourceFileExcludes>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>javadoc-no-fork</goal>
                        </goals>
                        <phase>verify</phase>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-source-plugin</artifactId>
                <executions>
                    <execution>
                        <id>bundle-sources</id>
                        <phase>package</phase>
                        <goals>
                            <goal>jar-no-fork</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>buildnumber-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <phase>initialize</phase>
                        <goals>
                            <goal>create</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <timestampFormat>{0,date,yyyy-MM-dd HH:mm:ss Z}</timestampFormat>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
                    </archive>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <release>17</release>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-failsafe-plugin</artifactId>
                <configuration>
                    <includes>
                        <include>cucumber/**/*</include>
                    </includes>
                    <skip>${skipIT}</skip>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <reuseForks>true</reuseForks>
                    <argLine>@{argLine} -Xmx1024m --illegal-access=permit</argLine>
                    <useSystemClassLoader>false</useSystemClassLoader>
                    <excludes>
                        <exclude>cucumber/**/*</exclude>
                        <exclude>${sonar.exclusions}</exclude>
                    </excludes>
                    <skip>${skipUT}</skip>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-report-plugin</artifactId>
                <configuration>
                    <linkXRef>true</linkXRef>
                    <xrefLocation>${project.build.directory}/site/sourceRefs</xrefLocation>
                    <aggregate>true</aggregate>
                </configuration>
                <executions>
                    <execution>
                        <phase>install</phase>
                        <goals>
                            <goal>report-only</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <configuration>
                    <excludes>com/example/provider/exampleapi/ApplicationLauncher.java</excludes>
                </configuration>
                <executions>
                    <execution>
                        <id>default-prepare-agent</id>
                        <goals>
                            <goal>prepare-agent</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>check</id>
                        <goals>
                            <goal>check</goal>
                        </goals>
                        <configuration>
                            <rules>
                                <rule>
                                    <element>BUNDLE</element>
                                    <limits>
                                        <limit>
                                            <counter>CLASS</counter>
                                            <value>COVEREDRATIO</value>
                                            <minimum>${code.coverage.requirement}</minimum>
                                        </limit>
                                        <limit>
                                            <counter>METHOD</counter>
                                            <value>COVEREDRATIO</value>
                                            <minimum>${code.coverage.requirement}</minimum>
                                        </limit>
                                        <limit>
                                            <counter>BRANCH</counter>
                                            <value>COVEREDRATIO</value>
                                            <minimum>${code.coverage.requirement}</minimum>
                                        </limit>
                                        <limit>
                                            <counter>LINE</counter>
                                            <value>COVEREDRATIO</value>
                                            <minimum>${code.coverage.requirement}</minimum>
                                        </limit>
                                    </limits>
                                </rule>
                            </rules>
                            <skip>${skipUT}</skip>
                        </configuration>
                    </execution>
                    <execution>
                        <id>report</id>
                        <phase>prepare-package</phase>
                        <goals>
                            <goal>report</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-release-plugin</artifactId>
                <configuration>
                    <localCheckout>true</localCheckout>
                    <pushChanges>false</pushChanges>
                    <goals>deploy</goals>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-checkstyle-plugin</artifactId>
                <executions>
                    <execution>
                        <id>checkstyle-check-aggregate</id>
                        <phase>compile</phase>
                        <configuration>
                            <configLocation>/example.checkstyle.xml</configLocation>
                            <encoding>UTF-8</encoding>
                            <consoleOutput>true</consoleOutput>
                            <failsOnError>false</failsOnError>
                            <enableRSS>false</enableRSS>
                            <excludes>**/com/example/provider/exampleapi/model/idq/**/*</excludes>
                        </configuration>
                        <goals>
                            <goal>checkstyle</goal>
                            <goal>checkstyle-aggregate</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-site-plugin</artifactId>
                <goals>
                    <goal>site</goal>
                </goals>
                <configuration>
                    <generateReports>false</generateReports>
                </configuration>
                <executions>
                    <execution>
                        <phase>initialize</phase>
                        <goals>
                            <goal>site</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.jvnet.jaxb2.maven2</groupId>
                <artifactId>maven-jaxb2-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <schemaLanguage>WSDL</schemaLanguage>
                    <generatePackage>com.example.exampleapi.model.idq</generatePackage>
                    <schemas>
                        <schema>
                            <url>
                                https://examplewebservice.example.com/ExampleService/WebService/ws_Rule/
                            </url>
                        </schema>
                    </schemas>
                </configuration>
            </plugin>
            <plugin>
                <groupId>pl.project13.maven</groupId>
                <artifactId>git-commit-id-plugin</artifactId>
                <configuration>
                    <offline>true</offline>
                    <failOnNoGitDirectory>false</failOnNoGitDirectory>
                </configuration>
            </plugin>
        </plugins>
</code>```

Body:
Getting the error cannot access jakarta.servlet.Filter when running mvn clean install and getting
class file for jakarta.servlet.Filter not found when trying to run. This seems to have started after moving from javax to jakarta, including updating my classes to use the jakarta namespace instead of the javax namespace, EXCEPT for in the case of javax.servlet, which can't be replaced with jakarta.servlet in any class because it's not found. I assume this is because mvn clean install never finishes due to the error?

${jackson.Version} is 2.14.0-rc1 and ${springVersion} is 2.7.5

NOTE: the spring-boot-starter-web dependency is already present and does not resolve the issue.

<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-annotations</artifactId>
                <version>${jackson.Version}</version>
            </dependency>
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-core</artifactId>
                <version>${jackson.Version}</version>
            </dependency>
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
                <version>${jackson.Version}</version>
            </dependency>
            <dependency>
                <groupId>com.fasterxml.jackson.module</groupId>
                <artifactId>jackson-modules-java8</artifactId>
                <version>${jackson.Version}</version>
                <type>pom</type>
                <scope>runtime</scope>
            </dependency>
            <dependency>
                <groupId>com.lmax</groupId>
                <artifactId>disruptor</artifactId>
                <version>3.4.4</version>
            </dependency>
            <dependency>
                <groupId>com.vlkan.log4j2</groupId>
                <artifactId>log4j2-logstash-layout</artifactId>
                <version>1.0.5</version>
            </dependency>
            <dependency>
                <groupId>jakarta.xml.bind</groupId>
                <artifactId>jakarta.xml.bind-api</artifactId>
                <version>4.0.0</version>
            </dependency>
            <dependency>
                <groupId>jakarta.servlet</groupId>
                <artifactId>jakarta.servlet-api</artifactId>
                <version>4.0.4</version>
            </dependency>
            <dependency>
                <groupId>jakarta.validation</groupId>
                <artifactId>jakarta.validation-api</artifactId>
                <version>3.0.2</version>
            </dependency>
            <dependency>
                <groupId>jakarta.annotation</groupId>
                <artifactId>ca-parent</artifactId>
                <version>1.3.5</version>
            </dependency>
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-csv</artifactId>
                <version>1.9.0</version>
            </dependency>
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-text</artifactId>
                <version>1.10.0</version>
            </dependency>
            <dependency>
                <groupId>org.apache.httpcomponents</groupId>
                <artifactId>httpclient</artifactId>
                <version>4.5.13</version>
            </dependency>
            <dependency>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-1.2-api</artifactId>
                <version>${log4j.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-api</artifactId>
                <version>${log4j.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-core</artifactId>
                <version>${log4j.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-jcl</artifactId>
                <version>${log4j.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-jul</artifactId>
                <version>${log4j.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-slf4j-impl</artifactId>
                <version>${log4j.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>3.4.0</version>
            </dependency>
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi</artifactId>
                <version>5.2.2</version>
            </dependency>
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi-ooxml</artifactId>
                <version>5.2.2</version>
            </dependency>
            <dependency>
                <groupId>org.apache.tomcat.embed</groupId>
                <artifactId>tomcat-embed-core</artifactId>
                <version>9.0.68</version>
            </dependency>
            <dependency>
                <groupId>org.glassfish.jaxb</groupId>
                <artifactId>jaxb-runtime</artifactId>
                <version>2.3.6</version>
            </dependency>
            <dependency>
                <groupId>org.javers</groupId>
                <artifactId>javers-spring-boot-starter-mongo</artifactId>
                <version>6.6.5</version>
            </dependency>
            <dependency>
                <groupId>org.jeasy</groupId>
                <artifactId>easy-rules-core</artifactId>
                <version>4.1.0</version>
            </dependency>
            <dependency>
                <groupId>org.jeasy</groupId>
                <artifactId>easy-rules-support</artifactId>
                <version>4.1.0</version>
            </dependency>
            <dependency>
                <groupId>org.springdoc</groupId>
                <artifactId>springdoc-openapi-ui</artifactId>
                <version>1.6.6</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-actuator</artifactId>
                <version>${springVersion}</version>
                <exclusions>
                    <exclusion>
                        <artifactId>spring-boot-starter-logging</artifactId>
                        <groupId>org.springframework.boot</groupId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-cache</artifactId>
                <version>${springVersion}</version>
                <exclusions>
                    <exclusion>
                        <artifactId>spring-boot-starter-logging</artifactId>
                        <groupId>org.springframework.boot</groupId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-log4j2</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-mongodb</artifactId>
                <version>${springVersion}</version>
                <exclusions>
                    <exclusion>
                        <artifactId>spring-boot-starter-logging</artifactId>
                        <groupId>org.springframework.boot</groupId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
                <version>${springVersion}</version>
                <exclusions>
                    <exclusion>
                        <artifactId>spring-boot-starter-logging</artifactId>
                        <groupId>org.springframework.boot</groupId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-validation</artifactId>
                <version>${springVersion}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web-services</artifactId>
                <version>${springVersion}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.security</groupId>
                <artifactId>spring-security-config</artifactId>
                <version>${spring.security.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.security</groupId>
                <artifactId>spring-security-core</artifactId>
                <version>${spring.security.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.security</groupId>
                <artifactId>spring-security-web</artifactId>
                <version>${spring.security.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-web</artifactId>
                <version>6.0.0</version>
            </dependency>
            <dependency>
                <groupId>org.yaml</groupId>
                <artifactId>snakeyaml</artifactId>
                <version>1.33</version>
            </dependency>
            <dependency>
                <groupId>com.example.pdp.test</groupId>
                <artifactId>testing-utils-common-spring</artifactId>
                <version>2.0.0</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>com.github.stefanbirkner</groupId>
                <artifactId>system-rules</artifactId>
                <version>1.19.0</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>io.cucumber</groupId>
                <artifactId>cucumber-java</artifactId>
                <version>6.11.0</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>io.cucumber</groupId>
                <artifactId>cucumber-junit</artifactId>
                <version>6.11.0</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>io.cucumber</groupId>
                <artifactId>cucumber-spring</artifactId>
                <version>6.11.0</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.junit.vintage</groupId>
                <artifactId>junit-vintage-engine</artifactId>
                <version>5.8.2</version>
                <scope>test</scope>
                <exclusions>
                    <exclusion>
                        <groupId>org.hamcrest</groupId>
                        <artifactId>hamcrest-core</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <version>${springVersion}</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.security</groupId>
                <artifactId>spring-security-test</artifactId>
                <version>${spring.security.version}</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>pl.project13.maven</groupId>
                <artifactId>git-commit-id-plugin</artifactId>
                <version>4.0.5</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

Here's my plugin section:

       <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-enforcer-plugin</artifactId>
                <executions>
                    <execution>
                        <id>enforce-versions</id>
                        <goals>
                            <goal>enforce</goal>
                        </goals>
                        <configuration>
                            <rules>
                                <requireMavenVersion>
                                    <version>3.3.9</version>
                                </requireMavenVersion>
                                <requireJavaVersion>
                                    <version>1.11</version>
                                </requireJavaVersion>
                            </rules>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jxr-plugin</artifactId>
                <configuration>
                    <destDir>${project.build.directory}/site/sourceRefs</destDir>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>jxr</goal>
                            <goal>test-jxr</goal>
                            <goal>aggregate</goal>
                            <goal>test-aggregate</goal>
                        </goals>
                        <phase>initialize</phase>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-pmd-plugin</artifactId>
                <executions>
                    <execution>
                        <phase>compile</phase>
                        <goals>
                            <goal>pmd</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <xrefLocation>${project.build.directory}/site/sourceRefs</xrefLocation>
                    <aggregate>true</aggregate>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-javadoc-plugin</artifactId>
                <configuration>
                    <show>private</show>
                    <nohelp>true</nohelp>
                    <failOnError>true</failOnError>
                    <sourceFileExcludes>
                        <exclude>**/idq/**</exclude>
                    </sourceFileExcludes>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>javadoc-no-fork</goal>
                        </goals>
                        <phase>verify</phase>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-source-plugin</artifactId>
                <executions>
                    <execution>
                        <id>bundle-sources</id>
                        <phase>package</phase>
                        <goals>
                            <goal>jar-no-fork</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>buildnumber-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <phase>initialize</phase>
                        <goals>
                            <goal>create</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <timestampFormat>{0,date,yyyy-MM-dd HH:mm:ss Z}</timestampFormat>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
                    </archive>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <release>17</release>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-failsafe-plugin</artifactId>
                <configuration>
                    <includes>
                        <include>cucumber/**/*</include>
                    </includes>
                    <skip>${skipIT}</skip>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <reuseForks>true</reuseForks>
                    <argLine>@{argLine} -Xmx1024m --illegal-access=permit</argLine>
                    <useSystemClassLoader>false</useSystemClassLoader>
                    <excludes>
                        <exclude>cucumber/**/*</exclude>
                        <exclude>${sonar.exclusions}</exclude>
                    </excludes>
                    <skip>${skipUT}</skip>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-report-plugin</artifactId>
                <configuration>
                    <linkXRef>true</linkXRef>
                    <xrefLocation>${project.build.directory}/site/sourceRefs</xrefLocation>
                    <aggregate>true</aggregate>
                </configuration>
                <executions>
                    <execution>
                        <phase>install</phase>
                        <goals>
                            <goal>report-only</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <configuration>
                    <excludes>com/example/provider/exampleapi/ApplicationLauncher.java</excludes>
                </configuration>
                <executions>
                    <execution>
                        <id>default-prepare-agent</id>
                        <goals>
                            <goal>prepare-agent</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>check</id>
                        <goals>
                            <goal>check</goal>
                        </goals>
                        <configuration>
                            <rules>
                                <rule>
                                    <element>BUNDLE</element>
                                    <limits>
                                        <limit>
                                            <counter>CLASS</counter>
                                            <value>COVEREDRATIO</value>
                                            <minimum>${code.coverage.requirement}</minimum>
                                        </limit>
                                        <limit>
                                            <counter>METHOD</counter>
                                            <value>COVEREDRATIO</value>
                                            <minimum>${code.coverage.requirement}</minimum>
                                        </limit>
                                        <limit>
                                            <counter>BRANCH</counter>
                                            <value>COVEREDRATIO</value>
                                            <minimum>${code.coverage.requirement}</minimum>
                                        </limit>
                                        <limit>
                                            <counter>LINE</counter>
                                            <value>COVEREDRATIO</value>
                                            <minimum>${code.coverage.requirement}</minimum>
                                        </limit>
                                    </limits>
                                </rule>
                            </rules>
                            <skip>${skipUT}</skip>
                        </configuration>
                    </execution>
                    <execution>
                        <id>report</id>
                        <phase>prepare-package</phase>
                        <goals>
                            <goal>report</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-release-plugin</artifactId>
                <configuration>
                    <localCheckout>true</localCheckout>
                    <pushChanges>false</pushChanges>
                    <goals>deploy</goals>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-checkstyle-plugin</artifactId>
                <executions>
                    <execution>
                        <id>checkstyle-check-aggregate</id>
                        <phase>compile</phase>
                        <configuration>
                            <configLocation>/example.checkstyle.xml</configLocation>
                            <encoding>UTF-8</encoding>
                            <consoleOutput>true</consoleOutput>
                            <failsOnError>false</failsOnError>
                            <enableRSS>false</enableRSS>
                            <excludes>**/com/example/provider/exampleapi/model/idq/**/*</excludes>
                        </configuration>
                        <goals>
                            <goal>checkstyle</goal>
                            <goal>checkstyle-aggregate</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-site-plugin</artifactId>
                <goals>
                    <goal>site</goal>
                </goals>
                <configuration>
                    <generateReports>false</generateReports>
                </configuration>
                <executions>
                    <execution>
                        <phase>initialize</phase>
                        <goals>
                            <goal>site</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.jvnet.jaxb2.maven2</groupId>
                <artifactId>maven-jaxb2-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <schemaLanguage>WSDL</schemaLanguage>
                    <generatePackage>com.example.exampleapi.model.idq</generatePackage>
                    <schemas>
                        <schema>
                            <url>
                                https://examplewebservice.example.com/ExampleService/WebService/ws_Rule/
                            </url>
                        </schema>
                    </schemas>
                </configuration>
            </plugin>
            <plugin>
                <groupId>pl.project13.maven</groupId>
                <artifactId>git-commit-id-plugin</artifactId>
                <configuration>
                    <offline>true</offline>
                    <failOnNoGitDirectory>false</failOnNoGitDirectory>
                </configuration>
            </plugin>
        </plugins>


来源: stackexchange

问:
Execute SQL Task Editor Stored Procedures .dtsx not making sense
Background: First tech job. Got hired as a JR Dev but my first task is fixing an API call that is calling for way more data than normal, hitting the monthly API limit for the company I'm working for.

Person who wrote the entire app left the company. I don't have anyone in my company to ask questions to in regards to this syntax question.

Before I can look into the API call- I need to understand the data that's being generated from the DB.
Its nested in a slew of stored procedures in MS SQL Server Management. I dont have experience with stored procedures and am having a difficult time reading the queries and the flow of data.

Stored procedure file path leads to a .dtsx file.
The first step in the .dtsx file is this:

SELECT ? = CONVERT(VARCHAR(10),COUNT(DISTINCT Email)) FROM [DB1].[dbo].[AdvisorData] d INNER JOIN [DB1].[dbo].[AdvisorLists] l ON d.ListId = l.Id WHERE l.[DataSent] =0 AND Email IS NOT NULL
from there it goes into :

SELECT  ? = COUNT(*) FROM [DB1].[dbo].[AppendedData_Staging] WHERE DATEPART(MONTH,[UpdateDate]) =  DATEPART(MONTH,GETDATE()) AND DATEPART(YEAR,[UpdateDate]) =  DATEPART(YEAR,GETDATE());

From there it states it generates a file and the file is sent to the API call.

Really my first question to understand the data flow is what does "?=" mean in this context?
I tried running the query without the =? and it returns nothing in the DB tables.
I've also tried breaking up the queries to further try to break down the data being manipulated but I cant seem to wrap my head around this.

Any help is appreciated.

Tried breaking up the queries and SELECT the individual tables but the ?= has me confused as to what the purpose of that is.

ContentLicense: CC BY-SA 4.0


问:
ValueError: Columns must be same length as key - Using pandas
Sample Data loaded to a data frame

id_type
id_value
dob

LANID
1
02/02/1989

EMPLOYEEID
2
11/02/1959

SSN
111-11-1111
09/11/2002

LANID
3
01/11/2001

EMPLOYEEID
89878654
09/01/2004

SSN
111-11-2716
07/11/1924

This is loaded in df_data pandas data frame

```<code>*
temp_df_list = []
#applying the filter and transform for SSN rows
temp_df = df_data[df_data.apply(filter_func to pull only SSN, axis=1)
temp_df['id_value'] = temp_df.loc[:, 'id_value'].apply(trans_func for SSN)
temp_df_list.append(temp_df)

#applying the filter and transform for employeeID rows
temp_df = df_data[df_data.apply(filter_func to pull only employeeID, axis=1)
temp_df['id_value'] = temp_df.loc[:, 'id_value'].apply(trans_func for employeeID )
temp_df_list.append(temp_df)

pandas.concat(temp_df_list)

df_data[temp_df.index] = temp_df #>>>>**Throws an error ValueError: Columns must be same length as key***
</code>```

Data Frame having the transformation applied to the filtered data and then eventually replacing the existing values with the news ones in the df_data data frame

Body:
Sample Data loaded to a data frame

id_type
id_value
dob

LANID
1
02/02/1989

EMPLOYEEID
2
11/02/1959

SSN
111-11-1111
09/11/2002

LANID
3
01/11/2001

EMPLOYEEID
89878654
09/01/2004

SSN
111-11-2716
07/11/1924

This is loaded in df_data pandas data frame

*
temp_df_list = []
#applying the filter and transform for SSN rows
temp_df = df_data[df_data.apply(filter_func to pull only SSN, axis=1)
temp_df['id_value'] = temp_df.loc[:, 'id_value'].apply(trans_func for SSN)
temp_df_list.append(temp_df)

#applying the filter and transform for employeeID rows
temp_df = df_data[df_data.apply(filter_func to pull only employeeID, axis=1)
temp_df['id_value'] = temp_df.loc[:, 'id_value'].apply(trans_func for employeeID )
temp_df_list.append(temp_df)

pandas.concat(temp_df_list)

df_data[temp_df.index] = temp_df #>>>>**Throws an error ValueError: Columns must be same length as key***

Data Frame having the transformation applied to the filtered data and then eventually replacing the existing values with the news ones in the df_data data frame


问:
using a variable in css class names, and dynamically giving it attributes
I have a set of classes named class1 up to classN, and I want each class classK to get the color rgb(k%256, 0, 0).
N in this case is dynamic and has no theoretical upper limit, as the elements with these class names are generated based on user input and some js code.

I was thinking of having CSS kind of like this:

```<code>class[k]{
    color: rgb(k%256, 0, 0);
}
</code>```

However, I have found no way of making CSS rules that vary based on a variable in the class name.

I briefly explored trying to use CSS variables, but those are more like constants and can't accommodate all classes 1 to N simultaneously.

Alternatively I could use javascript for the styling and have something like:

```<code>for(let i = 0; i < N; i++){
    document.getElementByClassName(`class${k}`).forEach(e => e.style = `color: rgb(${k}, 0, 0)`);
}
</code>```

However, this is not very scaleable if I want to add more complex CSS (which I most likely will, the rgb value I'm using now is proof of concept), it is very inefficient and I much prefer having CSS handle as much of my styling as possible.

Looking around on the internet I did find this post on stackoverflow that asks pretty much the same question, and received an answer of "this is impossible". However, that post was barely viewed and from 2015, so there might be a new feature since then that could help me.

Body:
I have a set of classes named class1 up to classN, and I want each class classK to get the color rgb(k%256, 0, 0).
N in this case is dynamic and has no theoretical upper limit, as the elements with these class names are generated based on user input and some js code.

I was thinking of having CSS kind of like this:

class[k]{
    color: rgb(k%256, 0, 0);
}

However, I have found no way of making CSS rules that vary based on a variable in the class name.

I briefly explored trying to use CSS variables, but those are more like constants and can't accommodate all classes 1 to N simultaneously.

Alternatively I could use javascript for the styling and have something like:

for(let i = 0; i < N; i++){
    document.getElementByClassName(`class${k}`).forEach(e => e.style = `color: rgb(${k}, 0, 0)`);
}

However, this is not very scaleable if I want to add more complex CSS (which I most likely will, the rgb value I'm using now is proof of concept), it is very inefficient and I much prefer having CSS handle as much of my styling as possible.

Looking around on the internet I did find this post on stackoverflow that asks pretty much the same question, and received an answer of "this is impossible". However, that post was barely viewed and from 2015, so there might be a new feature since then that could help me.


问:
vscode findFiles: remote web version ignores local files
Steps to reproduce:

Open vscode.dev

Open any (I tried github) remote repository

File > "New Text File" > Save that file as "newfile.txt"

F12 (Open dev tools)

F1 > "Developer: Install Extension from location"

Enter https://jamtis.github.io/web-latex/

F1 > "Find files web-latex"

Expected result:
The console (vscode.workspace.findFiles) should output all files including "newfile.txt".

Actual result:
The console (vscode.workspace.findFiles) outputs all files in the remote repo excluding "newfile.txt".

vscode.workspace.fs.readDirectory(rootPath) correctly returns the list of files including "newfile.txt".
Is this behaviour intended?


问:
CLGeocoder's geocodeAddressString always return an array with only one CLPlacemark object
CLGeocoder's geocodeAddressString function always return an array with only one CLPlacemark object, independently of the string passed as a parameter.

I'm using it like this:

let placesArray = try await CLGeocoder().geocodeAddressString(addressString)

CLGeocoder's documentation is clear:

In the case of forward-geocoding requests, multiple placemark objects
may be returned if the provided information yielded multiple possible
locations.

But that never happens. Even when passing something like "San" which should obvioulsy return an array with many CLPlacemark possibilities.

I've seen this same question asked in multiple places (like here, here, here, and here) but I can't find an answer.

Is this a bug? Am I doing something wrong? How can I obtain multiple possible locations from CLGeocoder?

EDIT: MKLocalSearch

I tried the same thing using MKLocalSearch:

```<code>let searchRequest = MKLocalSearch.Request()
searchRequest.naturalLanguageQuery = addressString

let search = MKLocalSearch(request: searchRequest)
let responses = try await search.start()
</code>```

Same problem, the returned MKLocalSearch.Response's mapItems array always contains only one object. Very strange.

Body:
CLGeocoder's geocodeAddressString function always return an array with only one CLPlacemark object, independently of the string passed as a parameter.

I'm using it like this:

let placesArray = try await CLGeocoder().geocodeAddressString(addressString)

CLGeocoder's documentation is clear:

In the case of forward-geocoding requests, multiple placemark objects
may be returned if the provided information yielded multiple possible
locations.

But that never happens. Even when passing something like "San" which should obvioulsy return an array with many CLPlacemark possibilities.

I've seen this same question asked in multiple places (like here, here, here, and here) but I can't find an answer.

Is this a bug? Am I doing something wrong? How can I obtain multiple possible locations from CLGeocoder?

EDIT: MKLocalSearch

I tried the same thing using MKLocalSearch:

let searchRequest = MKLocalSearch.Request()
searchRequest.naturalLanguageQuery = addressString

let search = MKLocalSearch(request: searchRequest)
let responses = try await search.start()

Same problem, the returned MKLocalSearch.Response's mapItems array always contains only one object. Very strange.


问:
Run batch script even when the command terminal closes
I have a batch file which runs a Python script.I run the batch file by double clicking on it and the Python scripts fine as expected.

But this opens a command terminal opens something like this:

When I close the terminal, it stops the Python script too.

This Python script is a long running script. So I want it to run even when the terminal closes. How can I achieve this?


问:
why does PHP invocation of cblas_dgemm result in error undefined symbol: dgemm_
I am trying to perform matrix multiplication in a PHP script by using FFI to invoke a function cblas_dgemm, defined in a CBLAS library. I want to know why this works on my Ubuntu 20.04 workstation running php 8.2 but does not work on another Ubuntu 20.04 virtual machine running php 7.4 or yet another virtual machine running Ubuntu 22.04 with PHP 8.1.

First, I built CBLAS according to these instructions. This yields a shared library whose full path is:

```<code>/home/sneakyimp/cblas/CBLAS/lib/cblas_LINUX.so
</code>```

I adapted the blas.h included in the ghostjat/np repo to point to that cblas_LINUX.so path and I removed some functions not defined in CBLAS to get this file, which I saved as cblas.h:

#define FFI_SCOPE "blas"
#define FFI_LIB "/home/sneakyimp/cblas/CBLAS/lib/cblas_LINUX.so"

typedef  size_t CBLAS_INDEX_t;

size_t cblas_idamax(const int N, const float *X, const int incX);

double cblas_dsdot(const int N, const float *X, const int incX, const float *Y,
                   const int incY);
double cblas_ddot(const int N, const double *X, const int incX,
                  const double *Y, const int incY);
double cblas_dnrm2(const int N, const double *X, const int incX);
double cblas_dasum(const int N, const double *X, const int incX);

void cblas_dswap(const int N, double *X, const int incX,
                 double *Y, const int incY);
void cblas_dcopy(const int N, const double *X, const int incX,
                 double *Y, const int incY);
void cblas_daxpy(const int N, const double alpha, const double *X,
                 const int incX, double *Y, const int incY);
void cblas_drotg(double *a, double *b, double *c, double *s);
void cblas_drotmg(double *d1, double *d2, double *b1, const double b2, double *P);
void cblas_drot(const int N, double *X, const int incX,
                double *Y, const int incY, const double c, const double  s);
void cblas_drotm(const int N, double *X, const int incX,
                double *Y, const int incY, const double *P);
void cblas_dscal(const int N, const double alpha, double *X, const int incX);
void cblas_dgemv(const enum CBLAS_ORDER order,
                 const enum CBLAS_TRANSPOSE TransA, const int M, const int N,
                 const double alpha, const double *A, const int lda,
                 const double *X, const int incX, const double beta,
                 double *Y, const int incY);
void cblas_dgbmv(const enum CBLAS_ORDER order,
                 const enum CBLAS_TRANSPOSE TransA, const int M, const int N,
                 const int KL, const int KU, const double alpha,
                 const double *A, const int lda, const double *X,
                 const int incX, const double beta, double *Y, const int incY);
void cblas_dtrmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
                 const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
                 const int N, const double *A, const int lda,
                 double *X, const int incX);
void cblas_dtbmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
                 const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
                 const int N, const int K, const double *A, const int lda,
                 double *X, const int incX);
void cblas_dtpmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
                 const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
                 const int N, const double *Ap, double *X, const int incX);
void cblas_dtrsv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
                 const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
                 const int N, const double *A, const int lda, double *X,
                 const int incX);
void cblas_dtbsv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
                 const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
                 const int N, const int K, const double *A, const int lda,
                 double *X, const int incX);
void cblas_dtpsv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
                 const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
                 const int N, const double *Ap, double *X, const int incX);
void cblas_dsymv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
                 const int N, const double alpha, const double *A,
                 const int lda, const double *X, const int incX,
                 const double beta, double *Y, const int incY);
void cblas_dsbmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
                 const int N, const int K, const double alpha, const double *A,
                 const int lda, const double *X, const int incX,
                 const double beta, double *Y, const int incY);
void cblas_dspmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
                 const int N, const double alpha, const double *Ap,
                 const double *X, const int incX,
                 const double beta, double *Y, const int incY);
void cblas_dger(const enum CBLAS_ORDER order, const int M, const int N,
                const double alpha, const double *X, const int incX,
                const double *Y, const int incY, double *A, const int lda);
void cblas_dsyr(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
                const int N, const double alpha, const double *X,
                const int incX, double *A, const int lda);
void cblas_dspr(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
                const int N, const double alpha, const double *X,
                const int incX, double *Ap);
void cblas_dsyr2(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
                const int N, const double alpha, const double *X,
                const int incX, const double *Y, const int incY, double *A,
                const int lda);
void cblas_dspr2(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
                const int N, const double alpha, const double *X,
                const int incX, const double *Y, const int incY, double *A);
void cblas_dgemm(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA,
                 const enum CBLAS_TRANSPOSE TransB, const int M, const int N,
                 const int K, const double alpha, const double *A,
                 const int lda, const double *B, const int ldb,
                 const double beta, double *C, const int ldc);
void cblas_dsymm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side,
                 const enum CBLAS_UPLO Uplo, const int M, const int N,
                 const double alpha, const double *A, const int lda,
                 const double *B, const int ldb, const double beta,
                 double *C, const int ldc);
void cblas_dsyrk(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
                 const enum CBLAS_TRANSPOSE Trans, const int N, const int K,
                 const double alpha, const double *A, const int lda,
                 const double beta, double *C, const int ldc);
void cblas_dsyr2k(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
                  const enum CBLAS_TRANSPOSE Trans, const int N, const int K,
                  const double alpha, const double *A, const int lda,
                  const double *B, const int ldb, const double beta,
                  double *C, const int ldc);
void cblas_dtrmm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side,
                 const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA,
                 const enum CBLAS_DIAG Diag, const int M, const int N,
                 const double alpha, const double *A, const int lda,
                 double *B, const int ldb);
void cblas_dtrsm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side,
                 const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA,
                 const enum CBLAS_DIAG Diag, const int M, const int N,
                 const double alpha, const double *A, const int lda,
                 double *B, const int ldb);
```
<p>I am now trying to run this PHP script, which loads that <code>cblas.h</code>, which refers to the just-compiled <code>cblas_LINUX.so</code> lib. <strong>This works on my workstation</strong>, but does not work on a couple of other virtual machines, <em>even if I recompile CBLAS on those other vms.</em></p>
<pre class="lang-php prettyprint-override"><code><?php
$ffi_blas = FFI::load(__DIR__ . '/cblas.h');

$m1 = [
    [1, 2, 3],
    [4, 5, 6]
];
$m1t = array_map(null, ...$m1);

// lifted from ghostjat/np, converts matrix to obj with FFI\CData
function get_cdata($m) {
    // this check should be more specific, but works for now
    if (!is_array($m) || !is_array($m[0])) {
        throw new Exception('param must be array of arrays');
    }

    $rowcount = sizeof($m);
    $colcount = sizeof($m[0]);
    $flat_m = [];
    $size = $rowcount * $colcount;
    $cdata = \FFI::cast('double *', \FFI::new("double[$size]"));
    $i = 0;
    foreach($m as $row) {
        foreach($row as $val) {
            $flat_m[$i] = $val;
            $cdata[$i] = $val;
            $i++;
        }
    }

    return [
        'rows' => $rowcount,
        'cols' => $colcount,
        'flat_m' => $flat_m,
        'cdata' => $cdata
    ];
}

$m1_c = get_cdata($m1);
$m1t_c = get_cdata($m1t);

define('CBLAS_ROW_MAJOR', 101);
define('CBLAS_NO_TRANS', 111);

$mr_size = $m1_c['rows'] * $m1t_c['cols'];
$mr_rows = $m1_c['rows'];
$mr_cols = $m1t_c['cols'];
$mr_cdata = \FFI::cast('double *', \FFI::new("double[$mr_size]"));

$start = microtime(true);
// this fn works by pointer, returns some void object, I think?
$some_val = $ffi_blas->cblas_dgemm(CBLAS_ROW_MAJOR, CBLAS_NO_TRANS, CBLAS_NO_TRANS, $m1_c['rows'], $m1t_c['cols'], $m1_c['cols'], 1.0, $m1_c['cdata'], $m1_c['cols'], $m1t_c['cdata'], $m1t_c['cols'], 0.0, $mr_cdata, $mr_cols);
echo "cblas_dgemm elapsed time: " . (microtime(true) - $start) . "seconds\n";
</code>```

On my workstation, it performs the correct calculation very quickly, even on very large matrices. On the machines where it doesn't work, they complain about an 'undefined symbol' like so:

```<code>php: symbol lookup error: /home/sneakyimp/cblas/CBLAS/lib/cblas_LINUX.so: undefined symbol: dgemm_
</code>```

Can anyone tell me what 'undefined symbol' means? It refers to PHP but doesn't look like the usual PHP error. I suspect cblas is looking for some function/variable/constant/object, dgemm_, which it cannot find. I note that a grep search shows various binary files that refer to this, but its only appearance in the source code is in the file CBLAS/include/cblas_f77.h:

#define F77_dgemm      dgemm_
```
<p>Also, how do I fix this on the vms where the script won't run? I suspect my workstation might have some package installed (some variant of lapack?) which isn't on the vms.</p>
<p>EDIT: I listed all the lapack packages on my workstation:</p>
<pre class="lang-bash prettyprint-override"><code>ii  liblapack3:amd64                           3.9.0-1build1                                                        amd64        Library of linear algebra routines 3 - shared version
ii  liblapacke:amd64                           3.9.0-1build1                                                        amd64        Library of linear algebra routines 3 - C lib shared version
ii  liblapacke-dev:amd64                       3.9.0-1build1                                                        amd64        Library of linear algebra routines 3 () - Headers
ii  libtmglib-dev:amd64                        3.9.0-1build1                                                        amd64        test matrix generators of LAPACK - development files
ii  libtmglib3:amd64                           3.9.0-1build1                                                        amd64        test matrix generators of LAPACK - shared version
</code>```

and tried installing those on the uncooperative vms

# this installs libblas3 libgfortran5 liblapack3 liblapacke libquadmath0 libtmglib3
sudo apt install liblapacke
```

That did not solve the problem. I also tried installing gfortran using apt. This also did not help.

Body:
I am trying to perform matrix multiplication in a PHP script by using FFI to invoke a function cblas_dgemm, defined in a CBLAS library. I want to know why this works on my Ubuntu 20.04 workstation running php 8.2 but does not work on another Ubuntu 20.04 virtual machine running php 7.4 or yet another virtual machine running Ubuntu 22.04 with PHP 8.1.

First, I built CBLAS according to these instructions. This yields a shared library whose full path is:

/home/sneakyimp/cblas/CBLAS/lib/cblas_LINUX.so

I adapted the blas.h included in the ghostjat/np repo to point to that cblas_LINUX.so path and I removed some functions not defined in CBLAS to get this file, which I saved as cblas.h:

#define FFI_SCOPE "blas"
#define FFI_LIB "/home/sneakyimp/cblas/CBLAS/lib/cblas_LINUX.so"

typedef  size_t CBLAS_INDEX_t;

size_t cblas_idamax(const int N, const float *X, const int incX);

double cblas_dsdot(const int N, const float *X, const int incX, const float *Y,
                   const int incY);
double cblas_ddot(const int N, const double *X, const int incX,
                  const double *Y, const int incY);
double cblas_dnrm2(const int N, const double *X, const int incX);
double cblas_dasum(const int N, const double *X, const int incX);

void cblas_dswap(const int N, double *X, const int incX,
                 double *Y, const int incY);
void cblas_dcopy(const int N, const double *X, const int incX,
                 double *Y, const int incY);
void cblas_daxpy(const int N, const double alpha, const double *X,
                 const int incX, double *Y, const int incY);
void cblas_drotg(double *a, double *b, double *c, double *s);
void cblas_drotmg(double *d1, double *d2, double *b1, const double b2, double *P);
void cblas_drot(const int N, double *X, const int incX,
                double *Y, const int incY, const double c, const double  s);
void cblas_drotm(const int N, double *X, const int incX,
                double *Y, const int incY, const double *P);
void cblas_dscal(const int N, const double alpha, double *X, const int incX);
void cblas_dgemv(const enum CBLAS_ORDER order,
                 const enum CBLAS_TRANSPOSE TransA, const int M, const int N,
                 const double alpha, const double *A, const int lda,
                 const double *X, const int incX, const double beta,
                 double *Y, const int incY);
void cblas_dgbmv(const enum CBLAS_ORDER order,
                 const enum CBLAS_TRANSPOSE TransA, const int M, const int N,
                 const int KL, const int KU, const double alpha,
                 const double *A, const int lda, const double *X,
                 const int incX, const double beta, double *Y, const int incY);
void cblas_dtrmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
                 const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
                 const int N, const double *A, const int lda,
                 double *X, const int incX);
void cblas_dtbmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
                 const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
                 const int N, const int K, const double *A, const int lda,
                 double *X, const int incX);
void cblas_dtpmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
                 const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
                 const int N, const double *Ap, double *X, const int incX);
void cblas_dtrsv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
                 const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
                 const int N, const double *A, const int lda, double *X,
                 const int incX);
void cblas_dtbsv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
                 const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
                 const int N, const int K, const double *A, const int lda,
                 double *X, const int incX);
void cblas_dtpsv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
                 const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
                 const int N, const double *Ap, double *X, const int incX);
void cblas_dsymv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
                 const int N, const double alpha, const double *A,
                 const int lda, const double *X, const int incX,
                 const double beta, double *Y, const int incY);
void cblas_dsbmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
                 const int N, const int K, const double alpha, const double *A,
                 const int lda, const double *X, const int incX,
                 const double beta, double *Y, const int incY);
void cblas_dspmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
                 const int N, const double alpha, const double *Ap,
                 const double *X, const int incX,
                 const double beta, double *Y, const int incY);
void cblas_dger(const enum CBLAS_ORDER order, const int M, const int N,
                const double alpha, const double *X, const int incX,
                const double *Y, const int incY, double *A, const int lda);
void cblas_dsyr(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
                const int N, const double alpha, const double *X,
                const int incX, double *A, const int lda);
void cblas_dspr(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
                const int N, const double alpha, const double *X,
                const int incX, double *Ap);
void cblas_dsyr2(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
                const int N, const double alpha, const double *X,
                const int incX, const double *Y, const int incY, double *A,
                const int lda);
void cblas_dspr2(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
                const int N, const double alpha, const double *X,
                const int incX, const double *Y, const int incY, double *A);
void cblas_dgemm(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA,
                 const enum CBLAS_TRANSPOSE TransB, const int M, const int N,
                 const int K, const double alpha, const double *A,
                 const int lda, const double *B, const int ldb,
                 const double beta, double *C, const int ldc);
void cblas_dsymm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side,
                 const enum CBLAS_UPLO Uplo, const int M, const int N,
                 const double alpha, const double *A, const int lda,
                 const double *B, const int ldb, const double beta,
                 double *C, const int ldc);
void cblas_dsyrk(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
                 const enum CBLAS_TRANSPOSE Trans, const int N, const int K,
                 const double alpha, const double *A, const int lda,
                 const double beta, double *C, const int ldc);
void cblas_dsyr2k(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
                  const enum CBLAS_TRANSPOSE Trans, const int N, const int K,
                  const double alpha, const double *A, const int lda,
                  const double *B, const int ldb, const double beta,
                  double *C, const int ldc);
void cblas_dtrmm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side,
                 const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA,
                 const enum CBLAS_DIAG Diag, const int M, const int N,
                 const double alpha, const double *A, const int lda,
                 double *B, const int ldb);
void cblas_dtrsm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side,
                 const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA,
                 const enum CBLAS_DIAG Diag, const int M, const int N,
                 const double alpha, const double *A, const int lda,
                 double *B, const int ldb);

I am now trying to run this PHP script, which loads that cblas.h, which refers to the just-compiled cblas_LINUX.so lib. This works on my workstation, but does not work on a couple of other virtual machines, even if I recompile CBLAS on those other vms.

<?php
$ffi_blas = FFI::load(__DIR__ . '/cblas.h');

$m1 = [
    [1, 2, 3],
    [4, 5, 6]
];
$m1t = array_map(null, ...$m1);

// lifted from ghostjat/np, converts matrix to obj with FFI\CData
function get_cdata($m) {
    // this check should be more specific, but works for now
    if (!is_array($m) || !is_array($m[0])) {
        throw new Exception('param must be array of arrays');
    }

    $rowcount = sizeof($m);
    $colcount = sizeof($m[0]);
    $flat_m = [];
    $size = $rowcount * $colcount;
    $cdata = \FFI::cast('double *', \FFI::new("double[$size]"));
    $i = 0;
    foreach($m as $row) {
        foreach($row as $val) {
            $flat_m[$i] = $val;
            $cdata[$i] = $val;
            $i++;
        }
    }

    return [
        'rows' => $rowcount,
        'cols' => $colcount,
        'flat_m' => $flat_m,
        'cdata' => $cdata
    ];
}

$m1_c = get_cdata($m1);
$m1t_c = get_cdata($m1t);

define('CBLAS_ROW_MAJOR', 101);
define('CBLAS_NO_TRANS', 111);

$mr_size = $m1_c['rows'] * $m1t_c['cols'];
$mr_rows = $m1_c['rows'];
$mr_cols = $m1t_c['cols'];
$mr_cdata = \FFI::cast('double *', \FFI::new("double[$mr_size]"));

$start = microtime(true);
// this fn works by pointer, returns some void object, I think?
$some_val = $ffi_blas->cblas_dgemm(CBLAS_ROW_MAJOR, CBLAS_NO_TRANS, CBLAS_NO_TRANS, $m1_c['rows'], $m1t_c['cols'], $m1_c['cols'], 1.0, $m1_c['cdata'], $m1_c['cols'], $m1t_c['cdata'], $m1t_c['cols'], 0.0, $mr_cdata, $mr_cols);
echo "cblas_dgemm elapsed time: " . (microtime(true) - $start) . "seconds\n";

On my workstation, it performs the correct calculation very quickly, even on very large matrices. On the machines where it doesn't work, they complain about an 'undefined symbol' like so:

php: symbol lookup error: /home/sneakyimp/cblas/CBLAS/lib/cblas_LINUX.so: undefined symbol: dgemm_

Can anyone tell me what 'undefined symbol' means? It refers to PHP but doesn't look like the usual PHP error. I suspect cblas is looking for some function/variable/constant/object, dgemm_, which it cannot find. I note that a grep search shows various binary files that refer to this, but its only appearance in the source code is in the file CBLAS/include/cblas_f77.h:

#define F77_dgemm      dgemm_

Also, how do I fix this on the vms where the script won't run? I suspect my workstation might have some package installed (some variant of lapack?) which isn't on the vms.

EDIT: I listed all the lapack packages on my workstation:

ii  liblapack3:amd64                           3.9.0-1build1                                                        amd64        Library of linear algebra routines 3 - shared version
ii  liblapacke:amd64                           3.9.0-1build1                                                        amd64        Library of linear algebra routines 3 - C lib shared version
ii  liblapacke-dev:amd64                       3.9.0-1build1                                                        amd64        Library of linear algebra routines 3 () - Headers
ii  libtmglib-dev:amd64                        3.9.0-1build1                                                        amd64        test matrix generators of LAPACK - development files
ii  libtmglib3:amd64                           3.9.0-1build1                                                        amd64        test matrix generators of LAPACK - shared version

and tried installing those on the uncooperative vms

# this installs libblas3 libgfortran5 liblapack3 liblapacke libquadmath0 libtmglib3
sudo apt install liblapacke

That did not solve the problem. I also tried installing gfortran using apt. This also did not help.