NetBeans 12.6,Spring Boot / Maven,Cisco AXL Schema - 项目后台扫描

NetBeans 12.6, Spring Boot / Maven, Cisco AXL Schema - Background scanning of projects

经常与 Background scanning of projects 有关的人抱怨说 NetBeans 启动时会发生这种情况。

我有一个 Spring Boot 2.6.xMaven 3.8.2 项目,使用 Cisco AXL Schema 12.5

Apache CXF从这个AXL Schema生成了很多Java个源代码文件。

当我在我的项目上执行 Clean and Build 之后 Background scanning of projects 立即开始。

而且最近大部分时间都比较长。

例如,我看到它也扫描

netbeans-12.6/webcommon/jsstubs/corestubs.zip

为什么它在构建我的项目时也要扫描这个?

但大多数时候,虽然它显示 100% 扫描完成,但它花费在生成的 Java 源代码文件所在的文件夹中

<project folder>/target/generated/cxf

生成了 2282 个 Java 个源代码文件。

我不确定 NetBeans 是否挂起或真的扫描了这些文件,它显示 100% 扫描所以应该完成。

通常需要很长时间,所以我不得不从控制台终止 NetBeans。重新启动 NetBeans 后,Background scanning for projects 开始并花费更短的时间,但这很烦人。

我该怎么办?

当我从控制台启动 NetBeans 时,我只执行 ./netbeansNetBeanssudo ./netbeans 有区别吗?

这是我的项目 folder/file 结构的样子,可能我使用不正确:

首先,我提取了 src 文件夹旁边的 AXL Schema

<project folder>
-> schema
   -> 12.5
      AXLAPI.wsdl
      AXLEnums.xsd
      AXLSoap.xsd
-> src
   -> main/...
   -> test/...

pom.xml我用

...
<build>
...
<plugin>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-codegen-plugin</artifactId>
    <version>3.4.5</version>
    <executions>
        <execution>
            <id>generate-sources</id>
            <phase>generate-sources</phase>
            <configuration>
                <sourceRoot>${project.build.directory}/generated/cxf</sourceRoot>
                <wsdlOptions>
                    <wsdlOption>
                        <wsdl>${basedir}/schema/12.5/AXLAPI.wsdl</wsdl>
                        <wsdlLocation>classpath:schema/12.5/AXLAPI.wsdl</wsdlLocation>
                        <extraargs></extraargs>
                    </wsdlOption>
                </wsdlOptions>
            </configuration>
            <goals>
                <goal>wsdl2java</goal>
            </goals>
        </execution>
    </executions>
</plugin>
...
<resources>
...
    <resource>
        <directory>./</directory>
        <includes>
            <include>schema/**</include>
        </includes>
    </resource>  
    <resource>
        <directory>target/generated/cxf</directory>
        <includes>
            <include>**/*.java</include>
        </includes>
    </resource>
...
</resources>
</build>
...

也许这个 pom.xml 设置不正确,这就是 Background scanning for projects 工作错误的原因。

当我在构建后查看生成的 war 文件时,我看到

WEB-INF
-> classes
   -> com/cisco/axl/api/_12
   -> schema/12.5

并且有些工件可能不属于那里。

例如在com/cisco/axl/api/_12中不仅有class文件,还有所有相关生成的Java源代码文件(全部2282)。

也许 schema/12.5 也不应该在 war 文件中。

我试过这个 pom:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" 
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.example</groupId>
  <artifactId>cxf</artifactId>
  <version>1.0-SNAPSHOT</version>
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>17</maven.compiler.source>
    <maven.compiler.target>17</maven.compiler.target>
  </properties>
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-codegen-plugin</artifactId>
        <version>3.4.5</version>
        <executions>
          <execution>
            <id>generate-sources</id>
            <phase>generate-sources</phase>
            <configuration>
              <wsdlOptions>
                <wsdlOption>
                  <wsdl>src/main/resources/wsdl/CustomerService.wsdl</wsdl>
                </wsdlOption>
              </wsdlOptions>
            </configuration>
            <goals>
              <goal>wsdl2java</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
  <dependencies>
    <dependency>
      <groupId>javax</groupId>
      <artifactId>javaee-api</artifactId>
      <version>7.0</version>
    </dependency>
  </dependencies>
</project>

(最新 cxf-codegen-plugin, no additional config, wsdl file from here,java ee 依赖项)

运行ning mvn clean install(“清理并构建项目”...使用此 wsdl 不到 5 秒),并得到我们:

..这张漂亮的图片(生成源的分辨率!按提供商 (cxf) 分组...我们可以有更多)。

结论

Netbeans 在“生成的源”方面是成熟的。 (只要他们在 target/generated-sources/<provider>;)。

另一方面,对于“生成的项目”(maven/gradle 例如 openapi-plugin),我 遇到了 (netbeans) 问题...并且不得不外部化/“源代码控制”“生成的东西”(/project!)。


不要做

  • build>resources>resource>directory>. 这将(尝试)将您的项目根目录(另外)打包到 target/classes!! (这可能会混淆 any IDE。)
  • ...>resource>directory>target,出于类似的原因,尤其是。在 Netbeans 中。

提示

  • 当我们希望模式和定义 驻留在 (打包的)class 路径中时,我们将它们放在 src/main/resources 中。否则:外面。

  • 我们将 <resources/> 添加到我们的 <build/>,只有当我们决定 so/know 我们 do/don 不创建“圈子”(与现有maven-defaults),不要“欺骗 netbeans”! (这已经过时了;)


更新:

  • 我用 this wsdl (axl-demo/schema) 更新了同一个项目。
  • 生成了 1647 个 classes.
  • Netbeans 花了一些时间来扫描:
    • 我增加了内存: {nb_home}/etc/netbeans.conf:
      netbeans_default_options="-J-Xmx4g ..."
      
      (感谢:How to assign more memory to Netbeans?,...)
    • (重启netbeans,)喝了咖啡
  • 但是之后(一旦扫描完成):仍然是“漂亮的图片”,我们可以 import/declare/use 生成 classes:


一些调整

..Yoda 添加到构建中:

  • 将 cxf 执行移动到 profile:

    <profiles>
      <profile>
        <id>gen</id>
        <build>
          <plugins>
            <plugin>
              <groupId>org.apache.cxf</groupId>
              <artifactId>cxf-codegen-plugin</artifactId>
              ...
    

    (仅)使用 mvn install -Pgen(或在 netbeans(项目>属性>运行>)配置(下拉)中激活它)。

  • 应用此: 喜欢:

    <build>
       <plugins>
         <plugin>
           <artifactId>maven-clean-plugin</artifactId>
           <version>3.1.0</version>
           <configuration>
             <excludeDefaultDirectories>true</excludeDefaultDirectories>
             <filesets>
               <fileset>
                 <directory>${project.build.directory}</directory>
                 <excludes>
                   <exclude>generated-sources/**</exclude>
                   <exclude>classes/com/cisco/**</exclude>
                 </excludes>
               </fileset>
             </filesets>
           </configuration>
         </plugin>
       </plugins>
    </build>
    

    我不同意“推荐方案”!对于 b/rarely 更改的“数千”classes ,谁想要清理并重新生成它们“数百”times/day?

这使我们从 (mvn -Pgen clean install) 加速:

------------------------------------------------------------------------
BUILD SUCCESS
------------------------------------------------------------------------
Total time:  44.515 s

到“项目 > 清理和构建”(mvn clean install):

------------------------------------------------------------------------
BUILD SUCCESS
------------------------------------------------------------------------
Total time:  4.494 s