Netbeans中无法识别外部JAR中的复合组件

时间:2013-06-16 06:20:34

标签: java jsf java-ee netbeans jar

我在JAR中打包了许多复合组件。但是,当在另一个项目中使用它们(使用Maven)时,Netbeans编辑器会在使用复合组件的行下放置红色错误行,即使项目按预期编译和运行也是如此。

复合组件JAR的文件夹结构如下所示:

compositeComponent.jar
   META-INF
      faces-config.xml
      highcharts-taglib.xml
      MANIFEST.MF
      web.xml
      maven
         // maven stuff.
      resources
          highcharts
             Chart.xhtml
             Series.xhtml
             Tooltip.xml          
   nz
      co
         kevindoran
            highcharts
               example
                  NZPopulationTrend.class


highcharts.taglib.xml看起来像是:

<facelet-taglib version="2.0" xmlns="http://java.sun.com/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facelettaglibrary_2_0.xsd">

    <namespace>http://nz.co.kevindoran/highcharts-jsf</namespace>
    <composite-library-name>highcharts</composite-library-name>

</facelet-taglib>


[旁注:faces-config.xmlweb.xml存在,允许通过将文件扩展名更改为WAR来将“JAR”部署为WAR(这是为了运行示例)。 / p>


在我当前的项目中,我已经在上面的项目中指定了Maven依赖项,如下所示:

<dependency>
    <groupId>nz.co.kevindoran</groupId>
    <artifactId>jsf-menu</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency> 

在JSF页面中,我使用复合组件,如下所示:

<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:hc="http://nz.co.kevindoran/highcharts-jsf">

....

<hc:TimeChart title="Price Over Time" xLabel="Date" yLabel="Sold Price (NZD)">
    <hc:TimeSeries name="Sold" series="#{cc.attrs.model.priceVsTimeChart.soldSeries}"/>
</hc:TimeChart>  

....
</html>

上面的所有行都显示红色错误行,并显示消息:“找不到名称空间http://nz.co.kevindoran/highcharts-jsf的库”

如何删除这些错误行?我已经看到许多类似问题的Netbeans错误报告,但似乎都解决了。

Netbeans 7.1,7.2和7.3(包括7.3.1)上发生此错误。

1 个答案:

答案 0 :(得分:0)

我有完全相同的问题。在我的情况下,它取决于/ src / main / java文件夹。如果它存在(仅在项目中,甚至在jar中),则包含此库的项目将显示“找不到名称空间的库...” 当我删除“java”文件夹时,它的工作原理。但是我的支持bean课程在罐子里错过了......

尝试使用Netbeans 7.2和7.3,maven 2

解决方案:

  1. 生成包含Java源文件的第二个项目。 (称为:jsf-lib-java)
  2. 在jsf-lib项目(使用xhtml的复合组件项目)中删除“java”文件夹和所有* .java源。
  3. 在配置后添加jsf-lib pom.xml:

  4. <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <executions>
          <execution>
            <id>unpack</id>
            <phase>generate-resources</phase>
            <goals>
              <goal>unpack</goal>
            </goals>
            <configuration>
              <artifactItems>
                <artifactItem>
                  <groupId>com.mycompany.project</groupId>
                  <artifactId>jsf-lib-java</artifactId>
                  <version>1.0-SNAPSHOT</version>
                  <type>jar</type>
                  <overWrite>true</overWrite>
                  <outputDirectory>src/main/</outputDirectory>
                  <includes>**/*.class</includes>
                </artifactItem>
              </artifactItems>
            </configuration>
          </execution>
        </executions>
      </plugin>
    

    就是这样。这将生成一个带有所需* .class文件的“好”jar文件。所以有可能“欺骗”Netbeans。

    现在我使用这个解决方案。这是一个黑客,但没有找到更好的解决方案。