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

Posted

技术标签:

【中文标题】NetBeans 12.6、Spring Boot / Maven、Cisco AXL Schema - 项目的后台扫描【英文标题】:NetBeans 12.6, Spring Boot / Maven, Cisco AXL Schema - Background scanning of projects 【发布时间】:2022-01-22 01:41:25 【问题描述】:

通常与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

生成的Java源代码文件有2282个。

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

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

我该怎么办?

当我从控制台启动NetBeans 时,我只做./netbeans。以sudo ./netbeans开头NetBeans有区别吗?

这是我的项目文件夹/文件结构的样子,也许我没有正确使用:

首先我提取了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 文件中。

【问题讨论】:

&lt;resource&gt;&lt;directory&gt;target/generated/cxf&lt;/directory&gt; 有“味道”!你想达到什么目的? (用这个...在项目资源管理器中浏览生成的源代码!?..请尝试默认值(cxf-output-folder...) &lt;resource&gt;&lt;directory&gt;./&lt;/directory&gt; 也不是设计的/对 netbeans 不好 NetBeans 抱怨找不到生成的Java源文件,所以我用target/generated/cxf...解决了.在我将它添加到 pom.xml 之后,NetBeans 中没有错误。 能否请您为 pom.xml 提供一些代码 sn-p 的答案,我不知道如何更改它。首先必须生成 AXL Java 源代码文件,为此指定了 ,生成这些文件的文件夹是 $project.build.directory/generated/cxf。但是当我尝试使用其中一个生成的 Java 源代码文件时,例如 RPhone.java,NetBeans 并不知道。 【参考方案1】:

我试过这个 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,无额外配置,wsdl文件from here,java ee依赖)

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

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

结论

Netbeans 在“生成的资源”方面已经成熟。 (只要他们在target/generated-sources/&lt;provider&gt;;)。

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


注意事项

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

提示

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

我们将&lt;resources/&gt; 添加到我们的&lt;build/&gt;,仅当我们决定/知道我们做什么/不创建“圈子”(使用现有的 maven-defaults),而不是“欺骗 netbeans”! (这已经过时了;)


更新:

我用this wsdl (axl-demo/schema) 更新了同一个项目。 它生成了 1647 个类。 Netbeans 扫描了一段时间: 我增加了内存: nb_home/etc/netbeans.conf:
netbeans_default_options="-J-Xmx4g ..."
(感谢:How to assign more memory to Netbeans?,...) (重启netbeans,)喝咖啡 但是(一旦扫描完成):仍然是“漂亮的图片”,我们可以导入/声明/使用生成的类:


一些调整

..Yoda 添加到构建中:

将 cxf-execution 移至 profile:

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

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

应用这个:How to protect auto-generated sources during clean package in maven? 喜欢:

<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/很少改变的“数千个”类,谁愿意每天“数百”次清理和重新生成它们?

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

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

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

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

【讨论】:

酷!??给我一个更复杂的wsdl! :):) 我当时创建了这个线程并自己回答了我的问题:***.com/questions/63297393/… 但当时并没有认识到缺点。我将尽快为您提供更复杂的 WSDL 的链接。我不使用 mvn 通过命令行构建它。 你可以试试这个pubhub.devnetcloud.com/media/axl/docs/java-jax-ws-quickstart/… 最高8.5,但应该足够了。提取它,将“schema”文件夹复制到带有 Maven 的 Spring Boot 项目中(可能从 start.spring.io 生成一个)。您可以删除模式文件夹中的所有其他内容,但只保留“8.5”文件夹),并尝试生成 AXL Java 源代码文件,并尝试在您的项目中使用这些文件,例如 RLine.java 左右。 已经找到了! ;) (v8!;) 也许对于这个特定的项目,有这么多生成的Java源文件,它可能是一个解决方案,只生成一次AXL Java源代码文件,将它们放入项目结构中的一个包中(例如src/main/java/myprojcect/cisco/...) 并注释掉 pom.xml 中的 CXF 插件,这样当 Clean and Build 完成时,不会发生任何生成,也不会扫描大量生成的文件。跨度>

以上是关于NetBeans 12.6、Spring Boot / Maven、Cisco AXL Schema - 项目的后台扫描的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Netbeans Spring-Boot 项目访问 h2-console

由于maven插件错误,spring boot maven项目未编译

Spring Boot 从命令行执行将文件添加到类路径

3、Spring Boot打包成jar并运行

如何在 NetBeans 8.2 中使用 Spring 5.0?

最新程序员生产力报告:Spring,Kotlin和NetBeans最得人心!