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.x
和Maven 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% 扫描,所以应该完成。
通常需要很长时间,所以我必须从控制台终止NetBeans
。 NetBeans
重新启动后,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
文件中。
【问题讨论】:
<resource><directory>target/generated/cxf</directory>
有“味道”!你想达到什么目的? (用这个...在项目资源管理器中浏览生成的源代码!?..请尝试默认值(cxf-output-folder...)
<resource><directory>./</directory>
也不是设计的/对 netbeans 不好
NetBeans 抱怨找不到生成的Java源文件,所以我用我试过这个 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/<provider>
;)。
另一方面,对于“生成的项目”(maven/gradle 例如openapi-plugin),我遇到了(netbeans)问题...并且不得不将“生成的项目”外部化/“源代码控制”东西”(/项目!)。
注意事项
build>resources>resource>directory>.
这将(尝试)将您的项目根(另外)打包到目标/类! (这可能会混淆任何 IDE。)
...>resource>directory>target
,出于类似的原因,尤其是。在 Netbeans 中。
提示
当我们希望架构和定义驻留在(打包的)类路径中时,我们将它们放在src/main/resources
中。否则:在外面。
我们将<resources/>
添加到我们的<build/>
,仅当我们决定/知道我们做什么/不创建“圈子”(使用现有的 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项目未编译