【问题标题】:Maven add generated folder(using maven plugin) as source folder , IntelliJ not recognizingMaven添加生成的文件夹(使用maven插件)作为源文件夹,IntelliJ无法识别
【发布时间】:2016-08-31 00:14:12
【问题描述】:

在我的maven Web项目中,cxf-codegen-plugin生成JAVA类并放到文件夹中

 ${basedir}/src/generated

我正在使用这些生成的类,在我的 Java 类中

src/main/java

我正在使用 IntelliJ IDE,而 IntelliJ 似乎无法识别

${basedir}/src/generated

作为源文件夹(这是正确的)。

我的问题是如何让 Maven 和 IntelliJ 将生成的文件夹重新识别为源文件夹。

我的项目结构是

    .
    ├── HOWTO.txt
    ├── pom.xml
    ├── src
    │   ├── generated
    │   │   └── com
    │   │       └── bharath
    │   │           └── ws
    │   │               └── trainings
    │   │                   ├── CreateOrdersRequest.java
    │   │                   ├── CreateOrdersResponse.java
    │   │                   ├── CustomerOrdersPortType.java
    │   │                   ├── CustomerOrdersService.java
    │   │                   ├── GetOrdersRequest.java
    │   │                   ├── GetOrdersResponse.java
    │   │                   ├── ObjectFactory.java
    │   │                   ├── Order.java
    │   │                   ├── Product.java
    │   │                   └── package-info.java
    │   ├── main
    │   │   ├── java
    │   │   │   └── com
    │   │   │       └── bharath
    │   │   │           └── ws
    │   │   │               └── trainings
    │   │   │                   └── impl
    │   │   │                       └── CustomersOrdersWSImpl.java
    │   │   └── webapp
    │   │       ├── WEB-INF
    │   │       │   ├── cxf-servlet.xml
    │   │       │   ├── web.xml
    │   │       │   └── wsdl
    │   │       │       └── CustomerOrders.wsdl
    │   │       └── index.jsp
    │   └── test
    │       └── java
    ├── target
    │   ├── classes
    │   │   └── com
    │   │       └── bharath
    │   │           └── ws
    │   │               └── trainings
    │   │                   ├── CreateOrdersRequest.class
    │   │                   ├── CreateOrdersResponse.class
    │   │                   ├── CustomerOrdersPortType.class
    │   │                   ├── CustomerOrdersService.class
    │   │                   ├── GetOrdersRequest.class
    │   │                   ├── GetOrdersResponse.class
    │   │                   ├── ObjectFactory.class
    │   │                   ├── Order.class
    │   │                   ├── Product.class
    │   │                   ├── impl
    │   │                   │   └── CustomersOrdersWSImpl.class
    │   │                   └── package-info.class
    │   ├── cxf-codegen-plugin-markers
    │   ├── generated-sources
    │   │   └── annotations
    │   ├── maven-archiver
    │   │   └── pom.properties
    │   ├── maven-status
    │   │   └── maven-compiler-plugin
    │   │       ├── compile
    │   │       │   └── default-compile
    │   │       │       ├── createdFiles.lst
    │   │       │       └── inputFiles.lst
    │   │       └── testCompile
    │   │           └── default-testCompile
    │   │               └── inputFiles.lst
    │   ├── surefire
    │   ├── wsdlfirstws
    │   │   ├── META-INF
    │   │   ├── WEB-INF
    │   │   │   ├── classes
    │   │   │   │   └── com
    │   │   │   │       └── bharath
    │   │   │   │           └── ws
    │   │   │   │               └── trainings
    │   │   │   │                   ├── CreateOrdersRequest.class
    │   │   │   │                   ├── CreateOrdersResponse.class
    │   │   │   │                   ├── CustomerOrdersPortType.class
    │   │   │   │                   ├── CustomerOrdersService.class
    │   │   │   │                   ├── GetOrdersRequest.class
    │   │   │   │                   ├── GetOrdersResponse.class
    │   │   │   │                   ├── ObjectFactory.class
    │   │   │   │                   ├── Order.class
    │   │   │   │                   ├── Product.class
    │   │   │   │                   ├── impl
    │   │   │   │                   │   └── CustomersOrdersWSImpl.class
    │   │   │   │                   └── package-info.class
    │   │   │   ├── cxf-servlet.xml
    │   │   │   ├── lib
    │   │   │   │   ├── aopalliance-1.0.jar
    │   │   │   │   ├── asm-3.3.1.jar
    │   │   │   │   ├── commons-codec-1.2.jar
    │   │   │   │   ├── commons-httpclient-3.1.jar
    │   │   │   │   ├── commons-logging-1.1.1.jar
    │   │   │   │   ├── cxf-core-3.0.2.jar
    │   │   │   │   ├── cxf-rt-bindings-soap-3.0.2.jar
    │   │   │   │   ├── cxf-rt-bindings-xml-3.0.2.jar
    │   │   │   │   ├── cxf-rt-databinding-jaxb-3.0.2.jar
    │   │   │   │   ├── cxf-rt-frontend-jaxws-3.0.2.jar
    │   │   │   │   ├── cxf-rt-frontend-simple-3.0.2.jar
    │   │   │   │   ├── cxf-rt-security-3.0.2.jar
    │   │   │   │   ├── cxf-rt-transports-http-3.0.2.jar
    │   │   │   │   ├── cxf-rt-transports-http-jetty-3.0.2.jar
    │   │   │   │   ├── cxf-rt-ws-addr-3.0.2.jar
    │   │   │   │   ├── cxf-rt-ws-policy-3.0.2.jar
    │   │   │   │   ├── cxf-rt-ws-security-3.0.2.jar
    │   │   │   │   ├── cxf-rt-wsdl-3.0.2.jar
    │   │   │   │   ├── ehcache-2.8.3.jar
    │   │   │   │   ├── geronimo-javamail_1.4_spec-1.7.1.jar
    │   │   │   │   ├── geronimo-servlet_3.0_spec-1.0.jar
    │   │   │   │   ├── jasypt-1.9.2.jar
    │   │   │   │   ├── jaxb-core-2.2.10-b140310.1920.jar
    │   │   │   │   ├── jaxb-impl-2.2.10-b140310.1920.jar
    │   │   │   │   ├── jetty-continuation-8.1.15.v20140411.jar
    │   │   │   │   ├── jetty-http-8.1.15.v20140411.jar
    │   │   │   │   ├── jetty-io-8.1.15.v20140411.jar
    │   │   │   │   ├── jetty-security-8.1.15.v20140411.jar
    │   │   │   │   ├── jetty-server-8.1.15.v20140411.jar
    │   │   │   │   ├── jetty-util-8.1.15.v20140411.jar
    │   │   │   │   ├── joda-time-2.2.jar
    │   │   │   │   ├── neethi-3.0.3.jar
    │   │   │   │   ├── opensaml-2.6.1.jar
    │   │   │   │   ├── openws-1.5.1.jar
    │   │   │   │   ├── slf4j-api-1.7.7.jar
    │   │   │   │   ├── spring-aop-3.2.0.RELEASE.jar
    │   │   │   │   ├── spring-beans-3.2.0.RELEASE.jar
    │   │   │   │   ├── spring-context-3.2.0.RELEASE.jar
    │   │   │   │   ├── spring-core-3.2.0.RELEASE.jar
    │   │   │   │   ├── spring-expression-3.2.0.RELEASE.jar
    │   │   │   │   ├── spring-jdbc-3.2.0.RELEASE.jar
    │   │   │   │   ├── spring-orm-3.2.0.RELEASE.jar
    │   │   │   │   ├── spring-tx-3.2.0.RELEASE.jar
    │   │   │   │   ├── spring-web-3.2.0.RELEASE.jar
    │   │   │   │   ├── spring-webmvc-3.2.0.RELEASE.jar
    │   │   │   │   ├── stax2-api-3.1.4.jar
    │   │   │   │   ├── woodstox-core-asl-4.4.1.jar
    │   │   │   │   ├── wsdl4j-1.6.3.jar
    │   │   │   │   ├── wss4j-bindings-2.0.2.jar
    │   │   │   │   ├── wss4j-policy-2.0.2.jar
    │   │   │   │   ├── wss4j-ws-security-common-2.0.2.jar
    │   │   │   │   ├── wss4j-ws-security-dom-2.0.2.jar
    │   │   │   │   ├── wss4j-ws-security-policy-stax-2.0.2.jar
    │   │   │   │   ├── wss4j-ws-security-stax-2.0.2.jar
    │   │   │   │   ├── xml-resolver-1.2.jar
    │   │   │   │   ├── xmlschema-core-2.1.0.jar
    │   │   │   │   ├── xmlsec-2.0.2.jar
    │   │   │   │   └── xmltooling-1.4.1.jar
    │   │   │   ├── web.xml
    │   │   │   └── wsdl
    │   │   │       └── CustomerOrders.wsdl
    │   │   └── index.jsp
    │   └── wsdlfirstws.war
    └── wsdlfirstws.iml

我还根据其他建议的 SO 答案添加了插件 build-helper-maven-plugin(添加另一个源文件夹),但在 mvn clean 之后它似乎不起作用(至少 IntelliJ 无法识别它们)安装。

    <plugin>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-codegen-plugin</artifactId>
        <version>${cxf.version}</version>
        <executions>
            <execution>
                <id>generate-sources</id>
                <phase>generate-sources</phase>
                <configuration>
                    <sourceRoot>${basedir}/src/generated</sourceRoot>
                    <wsdlOptions>
                        <wsdlOption>
                            <wsdl>${basedir}/src/main/webapp/WEB-INF/wsdl/CustomerOrders.wsdl</wsdl>
                        </wsdlOption>
                    </wsdlOptions>
                </configuration>
                <goals>
                    <goal>wsdl2java</goal>
                </goals>
            </execution>
        </executions>
    </plugin>
    <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>build-helper-maven-plugin</artifactId>
        <version>1.7</version>
        <executions>
            <execution>
                <id>add-source</id>
                <phase>generate-sources</phase>
                <goals>
                    <goal>add-source</goal>
                </goals>
                <configuration>
                    <sources>
                        <source>${basedir}/src/generated</source>
                    </sources>
                </configuration>
            </execution>
        </executions>
    </plugin>

【问题讨论】:

  • 我找到了一个解决方案:IntelliJ(可能还有其他 IDE)会识别 maven 插件的默认生成源目录。默认生成的源目录是 target/generated/。所以在这种情况下,删除 maven 插件中的 ${basedir}/src/generated 行,使其在默认文件夹中生成。

标签: java maven intellij-idea maven-3 maven-plugin


【解决方案1】:

由于它是“非标准”路径,intellij 不会自动拾取它,但您可以像这样轻松修复它:

右键单击文件夹,在您的情况下为 src\generated 并选择:

Mark Directory As -> Generated Source Root

您应该会看到它变成蓝色,并且下面的所有包(com... 等)都应该被识别为 java 代码。

【讨论】:

  • 谢谢,但我也在寻找一个基于 maven 的解决方案来完成同样的任务。
  • 理解这一点,但 intellij 并不了解 maven 插件生态系统中的所有插件(例如,cxf-codegen-plugin 之类的东西),而是依赖于默认值。有时使用非默认配置实际上会更清楚,在这种情况下,您需要手动设置它......也许有点烦人,但由于它是“一次性”配置,您只需要配置一次每个 Maven 项目:)
  • 我知道 IntelliJ 在没有用户操作的情况下无法理解任何非默认配置。感谢您的帮助伙伴。
猜你喜欢
  • 2013-10-19
  • 2011-11-01
  • 1970-01-01
  • 2012-08-10
  • 2013-04-10
  • 1970-01-01
  • 1970-01-01
  • 2021-11-24
  • 1970-01-01
相关资源
最近更新 更多