小编Ser*_*y K的帖子

Jar hell:如何在运行时使用类加载器将一个jar库版本替换为另一个jar库版本

我还是比较新的Java,所以请耐心等待.

我的问题是我的Java应用程序依赖于两个库.让我们称它们为库1和库2.这两个库共享对库3的相互依赖.但是:

  • 库1完全需要库3的版本1.
  • 库2完全要求库3的版本2.

这正是JAR地狱的定义(或者至少是其中的一个变体).如链接中所述,我无法在同一个类加载器中加载第三个库的两个版本.因此,我一直试图弄清楚是否可以在应用程序中创建一个新的类加载器来解决这个问题.我一直在研究URLClassLoader,但我无法弄明白.

这是一个演示问题的示例应用程序结构.应用程序的Main类(Main.java)尝试实例化Library1和Library2,并运行在这些库中定义的一些方法:

Main.java(原始版本,在尝试解决方案之前):

public class Main {
    public static void main(String[] args) {
        Library1 lib1 = new Library1();
        lib1.foo();

        Library2 lib2 = new Library2();
        lib2.bar();
    }
}
Run Code Online (Sandbox Code Playgroud)

Library1和Library2都共享对Library3的相互依赖,但是Library1需要版本1,而Library2只需要版本2.在这个例子中,这两个库只打印他们看到的Library3版本:

Library1.java:

public class Library1 {
  public void foo() {
    Library3 lib3 = new Library3();
    lib3.printVersion();    // Should print "This is version 1."
  }
}
Run Code Online (Sandbox Code Playgroud)

Library2.java:

public class Library2 {
  public void foo() {
    Library3 lib3 = new Library3();
    lib3.printVersion();    // Should print "This is …
Run Code Online (Sandbox Code Playgroud)

java jar classpath classloader

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

Angular CLI构建目标与环境

Angular CLI中,运行build命令时--target--environment选项之间有什么区别?

从文档:

ng build可以指定构建目标(--target = production或--target = development)和要与该构建一起使用的环境文件(--environment = dev或--environment = prod).默认情况下,使用开发构建目标和环境.

但是,他们从未真正澄清两者之间的区别.

从我可以收集的内容来看,--environment标志控制在进行构建时使用哪个环境文件(environment.tsvs environment.prod.ts).但那又有什么--target控制权呢?

angular-cli angular

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

ES6进口 - 感叹号是什么意思?

我正在关注今天选择ES6模块指南,我注意到他使用的一个导入语句最后有一个感叹号:

import 'bootstrap/css/bootstrap.css!';

这个感叹号是什么意思?

此import语句出现在startup.js文件的第一行.

javascript ecmascript-6 systemjs jspm

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

扩展jQuery UI小部件 - 覆盖父事件?

我正在尝试扩展jQuery UI Autocomplete小部件.在我的自定义小部件中,我需要能够覆盖select事件,同时理想情况下还允许小部件的用户将自己的处理程序附加到该事件.

这是我尝试过的一个方面:http://jsfiddle.net/nN46R/

我的第一次尝试(在jsfiddle中)是绑定到以下事件_create:

$.widget("custom.myautocomplete", $.ui.autocomplete, {
    _create: function() {
        this._super("_create");

        // Doesn't work
        this.element.bind('autocompleteselect', function() {
            alert('Handling autocompleteselect!');
        });
    }
});
Run Code Online (Sandbox Code Playgroud)

这没用.它如果你改变触发autocompleteselectselect,但只有当你选中文本框内的任何文字-但是这只是jQuery的选择处理程序射击,没有jQuery的用户界面的autocompleteselect.不是我想要的.

根据这篇文章,我尝试_select在窗口小部件中定义一个方法:

$.widget("custom.myautocomplete", $.ui.autocomplete, {
    _create: function() {
        this._super("_create");
    },
    _select: function (event, ui) {
        alert('Handling select!');
    }
});
Run Code Online (Sandbox Code Playgroud)

这也行不通.我尝试了同样的select(没有下划线),但没有运气.

唯一有效的方法是使用options数组传递默认处理程序,如此(jsfiddle):

$.widget("custom.myautocomplete", $.ui.autocomplete, {
    options: {
        select: function …
Run Code Online (Sandbox Code Playgroud)

javascript jquery jquery-ui

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

使用gcc构建共享库

解决了.请参阅下面的更正(标记为FIXED).

我在使用gcc创建共享库时遇到问题.

我创建了一个小样本项目,它与我正在研究的实际项目的结构非常相似.我在这里将其作为tar.gz存档提供:

http://209.59.216.197/libtest.tar.gz

修复:我在这里提供了固定版本:http :
//209.59.216.197/libtest_fixed.tar.gz

在这个示例项目中,我有一个应用程序(app),它在运行时加载我编写的共享库(libshared.so),并调用共享库定义的函数:function_inside_shared_lib().

反过来,这个共享库使用在静态库(libstatic.a)中定义的函数:function_inside_static_lib().

问题是当我构建共享库时,符号"function_inside_shared_lib"不会被导出.我使用"nm"检查共享库,但符号不在那里.我想知道我用来创建共享库的命令是否正确:

g ++ -g -ggdb -fPIC -rdynamic -I ../static -c shared.cpp -o shared.o
g ++ -g -ggdb -fPIC -rdynamic -shared -L ../static -lstatic -o libshared.so

修复:正确的命令是:

g ++ -g -ggdb -fPIC -rdynamic -I ../ static -c shared.cpp -o shared.o
g ++ -g -ggdb -fPIC -rdynamic -shared -L ../ static -o libshared.so shared.o -lstatic

我使用和不使用-rdynamic以及使用和不使用-fPIC尝试了这些命令.结果总是一样的.

我正在使用Ubuntu 10.04(64位)和g ++版本4.4.3.

完整的示例项目如下.(或者您可以使用我帖子顶部的链接下载档案).

serg @ rodent:〜/ libtest $ ls
app共享静态

以下是三个组成部分:

组件1:定义名为function_inside_static_lib()的函数的静态库.

这包括以下内容:

serg@rodent:~/libtest$ …
Run Code Online (Sandbox Code Playgroud)

c++ gcc shared-libraries

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

如何使用flexbox实现包含侧边栏内容的浮动侧边栏布局?

我正在尝试在桌面上实现响应式布局:

桌面布局

在移动设备上这样:

移动布局

请注意以下要求:

  • 边栏应该只占用适合内容所需的垂直空间.在侧边栏下方,主要部分的内容应占据整个宽度.
  • 在移动设备上,侧边栏应显示在主要内容下方.

这是一个包含我的初始HTML和CSS的jsfiddle:

https://jsfiddle.net/sergkr/np6k2tj3/

和一个片段:

body {
  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
  font-size: 14px;
  padding: 0 2em;
  line-height: 1.4;
  color: #333;
  background-color: #fff
}

section {
  margin: 1.6em 0;
}

section>h2 {
  margin: 0;
  padding: 12px 24px;
  font-size: 16px;
  background: #eceeee;
  text-transform: uppercase;
}

section>p {
  margin: 0;
  padding: 12px 24px;
  background: #fafafa;
}

.container {
  display: flex;
  flex-wrap: wrap;
}

main {
  flex-basis: 100%;
}

.sidebar {
  padding: 0 2em;
  background: #fbf6f4;
}

@media screen …
Run Code Online (Sandbox Code Playgroud)

html css css3 flexbox

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

猫鼬嵌套模式数组-对象没有方法'id'

我正在尝试在Mongoose中定义一个文件夹架构。对于每个文件夹,我想存储对父文件夹以及子子文件夹数组的引用(以使在任一方向的遍历都变得容易):

var folderSchema = new mongoose.Schema({
    name: String,
    parent: { type: Schema.Types.ObjectId, ref: 'Folder' },
    subfolders: [{ type: Schema.Types.ObjectId, ref: 'Folder' }],
});
Run Code Online (Sandbox Code Playgroud)

创建文件夹时,我只希望指定父文件夹,然后使用预先保存的钩子将子文件夹添加到父文件夹的subfolders数组中。这部分工作正常:

folderSchema.pre('save', function (next) {
    var self = this;

    // If creating a subfolder, then add the subfolder to
    // the parent folder's "subfolders" array

    if (this.parent) {
        Folder.findById(this.parent, function (err, parent) {
            if (err) return next(err);
            if (parent) {
                parent.subfolders.push(self);
                return parent.save(next);
            }
            return next();
        });
    } else {
        next();
    }
}); …
Run Code Online (Sandbox Code Playgroud)

mongoose node.js

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