小编Rya*_*tts的帖子

如何使用webjars.org上的Font Awesome和JSF

我试图在我的JSF应用程序中使用Font Awesome图标.我按照入门说明并将以下内容添加到我的视图部分,取得了一些成功<h:head>:

<link href="//netdna.bootstrapcdn.com/font-awesome/3.2.1/css/font-awesome.css"
      rel="stylesheet" />
Run Code Online (Sandbox Code Playgroud)

当我使用这个icon-home类时,这给了我一个很好的主页图标:

在此输入图像描述

但是,我不想依赖引导服务器来提供Font Awesome资源,所以我试图将这些与我的战争捆绑在一起,并配置我的视图以使用捆绑的资源.

我正在使用webjars项目创建的预制JAR.我的pom具有以下依赖性:

<dependency>
    <groupId>org.webjars</groupId>
    <artifactId>font-awesome</artifactId>
    <version>3.2.1</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

这将JAR放在我的WAR的WEB-INF/lib目录中.JAR结构的相关部分是:

META-INF
  - MANIFEST.MF
  + maven
  - resources
    - webjars
      - font-awesome
        - 3.2.1
          - css
            - font-awesome.css
            - *other css files*
          - font
            - *font files*
Run Code Online (Sandbox Code Playgroud)

我尝试了以下方法在我的项目中包含图标:

<h:outputStylesheet library="webjars" 
                    name="font-awesome/3.2.1/css/font-awesome.css"  />
Run Code Online (Sandbox Code Playgroud)

但是,这会将以前工作的主页图标呈现为:

在此输入图像描述

我的浏览器(Chrome)在控制台中显示以下错误(域/端口/上下文根已更改以保护无辜;):

GET http://DOMAIN:PORT/CONTEXT-ROOT/javax.faces.resource/font-awesome/3.2.1/font/fontawesome-webfont.woff?v=3.2.1 404 (Not Found) 
GET http://DOMAIN:PORT/CONTEXT-ROOT/javax.faces.resource/font-awesome/3.2.1/font/fontawesome-webfont.ttf?v=3.2.1 404 (Not Found) 
GET http://DOMAIN:PORT/CONTEXT-ROOT/javax.faces.resource/font-awesome/3.2.1/font/fontawesome-webfont.svg 404 (Not Found)
Run Code Online (Sandbox Code Playgroud)

所以看起来虽然正确解析了css文件,但是找不到包含css文件引用的字体的文件.我已在css文件中检查了这些引用,它们是:

src: url('../font/fontawesome-webfont.eot?v=3.2.1');
src: …
Run Code Online (Sandbox Code Playgroud)

css jsf maven font-awesome webjars

19
推荐指数
3
解决办法
2万
查看次数

如何从Eclipse中排除Maven测试范围的依赖项(但将其保留在单元测试的路径中)

我在使Eclipse符合测试范围的Maven依赖项时遇到了一些问题 - 它出现在构建路径上并且弄乱了eclipse的编译/ javadoc解析.

Java EE库的示例

我一直在使用该javaee-api-6.0库来编译我的Java EE应用程序.

但是,出于单元测试的目的,我想访问的不仅仅是api - 我需要一个实现.所以我将嵌入式glassfish libs包含在这样的测试范围内:

<repositories>
    <repository>
        <id>glassfish-extras-repository</id>
        <url>http://download.java.net/maven/glassfish/org/glassfish/extras</url>
    </repository>
</repositories>

<dependencies>
    <dependency>
        <groupId>org.glassfish.extras</groupId>
        <artifactId>glassfish-embedded-all</artifactId>
        <version>3.1.1</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-api</artifactId>
        <version>6.0</version>
        <scope>compile</scope>
        <type>jar</type>
    </dependency>
</dependencies>
Run Code Online (Sandbox Code Playgroud)

与Maven一起工作

根据我的理解,由于<scope>test</scope>玻璃鱼依赖性,它不会被包括在常规compile阶段.

因为这两个依赖项都将包含在test-compile阶段中,所以我确定将gla​​ssfish依赖项置于javaee-api依赖项之前,以便在编译测试类时优先使用前者.因此,当仅使用Maven构建时,此配置不是问题.

在Eclipse中不能按预期工作

但是,当使用m2e和Eclipse时,glassfish依赖项列在我的构建路径中:

构建路径上列出的依赖项

因为在java-ee-api依赖项之前列出了glassfish依赖项,所以Eclipse似乎使用错误的lib(glassfish而不是java-ee-api)来验证/编译/查找javadoc.(实际上,我并不是100%确定编译使用的是错误的lib - 这取决于是否在Eclipse下使用Maven来执行验证代码时使用的编译,而且我不知道它是否存在 - 但是javadoc查找肯定引用了错误的lib)

问题

除了在运行单元测试时,如何阻止Eclipse使用glassfish lib?我想确保我的编译/ javadoc查找在api上发生,而不是该api的特定实现.

dependencies m2eclipse java-ee maven m2e

9
推荐指数
2
解决办法
9428
查看次数

如何为嵌入式EJB容器定义测试数据源

我试图使用嵌入式EJB容器测试我的EJB.在生产中,我依赖于在应用程序服务器中配置的JTA数据源.但是,在测试期间,我想连接到不同的DB(内存中的Derby).

问题是我无法看到如何告诉EJB容器覆盖生产persistence.xml中定义的JTA数据源(在src/main/resources/META-INF中),并连接到我的内存中的derby DB.JTA数据源在persistence.xml文件中定义,如下所示:

<jta-data-source>jdbc/myDS</jta-data-source>
Run Code Online (Sandbox Code Playgroud)

尝试1:使用测试persistence.xml

我尝试创建一个测试persistence.xml文件(在src/test/resources/META-INF中),该文件定义:

<property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.EmbeddedDriver" />
<property name="javax.persistence.jdbc.url" value="jdbc:derby:memory:myDataBase;create=true;" />
<property name="javax.persistence.jdbc.user" value="sa" />
<property name="javax.persistence.jdbc.password" value="password" /> 
Run Code Online (Sandbox Code Playgroud)

但这是没有意义的,因为当我指定EJB容器使用被测模块时

Map properties = new HashMap();
properties.put(EJBContainer.MODULES, new File[] { new File("target/classes/") });
ec = EJBContainer.createEJBContainer(properties);
Run Code Online (Sandbox Code Playgroud)

容器只使用主persistence.xml文件而不是我的测试文件.

尝试2:将主类和测试类合并为单个爆炸模块

我能看到使这种方法有效的唯一方法是使用这里描述的方法- 将被测模块的类复制到一个单独的位置(例如target/ejb-testing-classes),然后复制测试persistence.xml将文件放在顶部,然后将此新位置指定给EJB容器:

Map properties = new HashMap();
properties.put(EJBContainer.MODULES, new File[] { new File("target/ejb-testing-classes/") });
ec = EJBContainer.createEJBContainer(properties);
Run Code Online (Sandbox Code Playgroud)

但这似乎是不必要的笨拙.如果我试图在容器中部署预先打包的模块(即依赖项),那么将来也可能是一个问题,因为我需要在合并之前爆炸jar.

我的愿望:数据源覆盖EJB容器的属性

我认为可能有其他属性可以传递到EJB容器中,但到目前为止我只能找到适合openEJBwebsphere的属性.我使用嵌入式Glassfish来提供我的嵌入式EJB容器,因为它是目标平台.(我现在已经找到了glassfish属性 - 请参阅下面的更新#1)

当然,每个尝试使用嵌入式EJB容器和不同于生产数据库的数据源测试EJB的人都会遇到这个问题.即便是这个人也放弃了这一点并使用了默认的嵌入式数据库,这对我来说不是一个选择.

任何帮助将非常感激.

更新1:我找到了Glassfish EJB容器接受的属性列表,起初看起来我可以使用以下属性

org.glassfish.ejb.embedded.glassfish.configuration.file
Run Code Online (Sandbox Code Playgroud)

在domain.xml中定义数据源并将容器指向它.但是,根据 …

ejb jpa glassfish java-ee maven-glassfish-plugin

9
推荐指数
1
解决办法
4529
查看次数

使用自定义值集合类型创建Commons Collections MultiValueMap

Apache Commons Collections库的4.0版本增加了泛型支持.我无法转换代码以利用它:

我想要一个MultiValueMap以字符串作为键,以及字符串的集合作为值.但:

  1. 键应该保留插入顺序(所以我通过装饰来创建多值映射LinkedHashMap)
  2. 每个键的值应该是唯一的并保留插入顺序(所以我希望值Collection类型为a LinkedHashSet).

我能得到的最接近的是:

MultiValueMap<String, String> orderedMap = MultiValueMap.multiValueMap(
    new LinkedHashMap<String, Collection<String>>(), 
    LinkedHashSet.class
);
Run Code Online (Sandbox Code Playgroud)

但是这会产生错误:

multiValueMap(Map<K,? super C>, Class<C>)类型中 的方法MultiValueMap不适用于参数 (LinkedHashMap<String,Collection<String>>, Class<LinkedHashSet>)

所以现在我在仿制药地狱.任何建议都是最受欢迎的.

在4.0版之前,我通过以下方式实现了这一目标:

MultiValueMap orderedMap = MultiValueMap.decorate(
    new LinkedHashMap<>(), 
    LinkedHashSet.class
);
Run Code Online (Sandbox Code Playgroud)

简单!我提供了LinkedHashMap使用MultiValueMap行为进行装饰,并指定LinkedHashSet要用作值的collection()的类型.但是,这需要铸造,当我打电话put()get(),所以我希望能够使用4.0提供的新的通用版本.

java generics apache-commons-collection

5
推荐指数
1
解决办法
6636
查看次数

如何使用 Arquillian 从单独的 Maven 模块测试 WAR 的内容

我在网上找到了一些零碎的知识,但无法将它们组合起来来解决这个具体案例。这个答案似乎是一个很好的开始,但它专门处理 EAR 依赖关系。

我的(简化的)maven项目结构如下:

parent
 |__domain     (a jar)
 |__domain-it  (integration tests for the domain module)
 |__web        (a war; depends on domain)
 |__web-it     (integration tests for the web module)
Run Code Online (Sandbox Code Playgroud)

我正在寻找以下问题的解决方案:

  1. 我想要进行 Arquillian 集成测试来测试模块包含的代码web
  2. 这些测试将包含在一个单独的web-it模块中。
  3. 由于web模块依赖于domain模块,web-it因此集成测试还需要将domain模块中的代码放在类路径上。
  4. 两者domainweb依赖于一些第三方库,例如 org.apache.commons:commons-lang3测试类路径上也需要这些库。
  5. 测试需要通过命令行上的 Maven 运行,并通过 junit 直接在 Eclipse 中运行。

我正在 Glassfish 3.1.2 上运行。

任何帮助,将不胜感激。对我来说很奇怪的是,没有针对这种情况的具体 Arquillian 文档,因为我认为这是一种非常常见的情况。也许我错过了一些基本的东西?

以下是我迄今为止尝试过的一些方法:

  1. 通过添加以下内容来建立web-it依赖,如下所示:webweb-it/pom.xml

    <dependency>  
        <groupId>${project.groupId}</groupId>
        <artifactId>web</artifactId>
        <version>${project.version}</version>
        <scope>test</scope> …
    Run Code Online (Sandbox Code Playgroud)

java integration-testing maven jboss-arquillian

5
推荐指数
0
解决办法
1082
查看次数

JSF查看多次重建的Scoped Bean

我以为@ViewScoped当用户在同一页面上时,我认为应该阻止bean被重建...那么为什么我的@ViewScopedJSf控制器bean甚至在操作处理程序导致浏览器离开该视图之前被多次创建?

任何人都能指出我在正确的方向吗?

这是我的代码:

视图(domain/edit.xhtml)

<h:form prependId="false">
    <h:inputText id="descriptionField" value="#{domainEdit.domain.description}" />
    <h:commandButton id="saveButton" value="save" action="#{domainEdit.save}" />
</h:form>
Run Code Online (Sandbox Code Playgroud)

ViewScoped控制器(DomainEdit.java)

@Named("domainEdit")
@ViewScoped
public class DomainEdit implements Serializable {

    private static final long serialVersionUID = 1L;


    protected DomainEdit() {
    }

    @PostConstruct
    protected void init() {
        System.out.println("post construct called.");
    }

    @PreDestroy
    public void destroy() {
        System.out.println("pre destroy called.");
    }

    public DomainEntity getDomain() {
        System.out.println("displaying domain...");

        // some code to return the domain
        return domain;
    }

    public String save() {
        System.out.println("saving...");

        // …
Run Code Online (Sandbox Code Playgroud)

jsf ejb java-ee view-scope

2
推荐指数
1
解决办法
3976
查看次数

Maven m2e-egit在开普勒下安装失败

今天我从eclipse markerplace安装了Maven插件(m2e).现在我想从github签出一个项目."从SCM中检出Maven项目"对话框显示"SCM类型"下拉列表,因此我单击了一个链接以安装git的连接器.

我在另一个对话框中找到了连接器"m2e-egit",所以我检查了它,单击Finish.它失败并显示以下消息:

Operation details
Cannot complete the install because one or more required items could not be found.
Software being installed: Maven SCM Handler for EGit 0.14.0.201207041402 (org.sonatype.m2e.egit.feature.feature.group 0.14.0.201207041402)
Missing requirement: Maven SCM Handler for EGit 0.14.0.201207041402 (org.sonatype.m2e.egit 0.14.0.201207041402) requires 'bundle org.eclipse.egit.core [1.0.0,3.0.0)' but it could not be found
Cannot satisfy dependency:
From: Maven SCM Handler for EGit 0.14.0.201207041402 (org.sonatype.m2e.egit.feature.feature.group 0.14.0.201207041402)
To: org.sonatype.m2e.egit [0.14.0.201207041402]
Run Code Online (Sandbox Code Playgroud)

它声称我没有安装EGit,但我可以确认我已经从"关于Eclipse功能"对话框安装了Eclipse EGit 3.1.0.20131021548-r.

我能找到的其他信息:

Eclipse:Kelper Service Release 1 - build id 20130919-0819

Eclipse.org - m2e:1.4.0.20130601-0317 …

eclipse git maven

1
推荐指数
1
解决办法
3534
查看次数