如何在冻结的 m4l 设备中包含 mxj Java jar/class 文件夹?
How can I include a mxj Java jar/class folder in a freezed m4l-Device?
我有一个使用 java/mxj 的 maxforlive 设备。
我在开发过程中使用了所有这些选项来包含我的 java 文件:
- 通过 max.java.config.txt.
包括我的 (maven) target/classes 目录
- 通过选项 > 文件首选项添加目录
- 添加一个jar到自动生成的(OSX)~/Documents/Max7/Max for Live Devices/MyProject Project/目录
所有这些路径都工作正常,即文件被拾取并且我的 mxj 对象工作。
但是,当我冻结设备以供发布时,java 文件未包含在任何这些路径中。
我试图理解
https://docs.cycling74.com/max7/tutorials/jitterchapter99_appendixd 虽然我不是在构建 standalone,而是 freezed maxforlive 设备,所以我包括了 max.jar 和 mxj.mxo 在项目文件夹中也不起作用。
当我将 target/classes 或 target/classes/myproject 文件夹复制到生成的项目文件夹中时(/code,/code/classes,/classes), max 将所有 class 文件移出到 /code 中,为我创造了很多工作,甚至没有为开发挑选 classes。
我在 maxforlive.com 上看到设备正确包含 java 文件,所以我知道可以做到。我怎样才能做到这一点?
不幸的是,这是 MFL 中长期存在的错误。
这是我在 2012 年重现的一部电影,此后一直没有修复。 http://arttech.nl/projectjavaissue.mov
这意味着分发带有 java class 文件的 MFL 设备的唯一方法是单独包含它们。
好的,就是这样:只包含一个 class,没有其他 class 依赖关系,除了 MaxObject 工作正常。也不需要像我在之前的评论中所说的那样添加 .java 文件。
您只需:
- 在你的修补程序中有工作的 mxj 对象(不管你把它保存在哪里)
- 悬停时单击底部显示 "Show containing project" 的按钮
- 添加您的class文件
- 冻结
当你有更多 class 时,它会变得复杂。
1) 如果您有包含文件夹和子文件夹的典型 java 层次结构,那将不起作用。由于您必须单独添加每个文件,因此层次结构将被破坏。使用 jar 并将其添加到包含的项目中。
2) 不管你信不信,它来了:你将要使用的所有 classes 都必须在第一次实例化时加载。我称之为静态 class 分配 ;)
实现该目标的方法:
在扩展 MaxObject 或其调用的任何其他构造函数的 class 的构造函数中为每个 class 创建一个新实例。这包括 class 只有静态方法的 es。
如果您碰巧使用接口并动态创建这些接口的实现 (new Runnable() {...}),请不要这样做。动态实现是新的 classes.
有趣的事实:您也可以覆盖 classes 的方法。去吧
class Runner {
public void run() { throw new Exception("not implemented"); }
}
然后你可以动态创建一个
new Runner() {
public void run() {
MaxObject.post("Even Mr. Gosling says interfaces were a mistake!");
}
}
不信?我不怪你。看着
https://github.com/mihop/mxj-wsserver
和
http://www.maxforlive.com/library/device/3809
待转换。
我有一个使用 java/mxj 的 maxforlive 设备。
我在开发过程中使用了所有这些选项来包含我的 java 文件:
- 通过 max.java.config.txt. 包括我的 (maven) target/classes 目录
- 通过选项 > 文件首选项添加目录
- 添加一个jar到自动生成的(OSX)~/Documents/Max7/Max for Live Devices/MyProject Project/目录
所有这些路径都工作正常,即文件被拾取并且我的 mxj 对象工作。
但是,当我冻结设备以供发布时,java 文件未包含在任何这些路径中。
我试图理解 https://docs.cycling74.com/max7/tutorials/jitterchapter99_appendixd 虽然我不是在构建 standalone,而是 freezed maxforlive 设备,所以我包括了 max.jar 和 mxj.mxo 在项目文件夹中也不起作用。
当我将 target/classes 或 target/classes/myproject 文件夹复制到生成的项目文件夹中时(/code,/code/classes,/classes), max 将所有 class 文件移出到 /code 中,为我创造了很多工作,甚至没有为开发挑选 classes。
我在 maxforlive.com 上看到设备正确包含 java 文件,所以我知道可以做到。我怎样才能做到这一点?
不幸的是,这是 MFL 中长期存在的错误。
这是我在 2012 年重现的一部电影,此后一直没有修复。 http://arttech.nl/projectjavaissue.mov
这意味着分发带有 java class 文件的 MFL 设备的唯一方法是单独包含它们。
好的,就是这样:只包含一个 class,没有其他 class 依赖关系,除了 MaxObject 工作正常。也不需要像我在之前的评论中所说的那样添加 .java 文件。
您只需:
- 在你的修补程序中有工作的 mxj 对象(不管你把它保存在哪里)
- 悬停时单击底部显示 "Show containing project" 的按钮
- 添加您的class文件
- 冻结
当你有更多 class 时,它会变得复杂。
1) 如果您有包含文件夹和子文件夹的典型 java 层次结构,那将不起作用。由于您必须单独添加每个文件,因此层次结构将被破坏。使用 jar 并将其添加到包含的项目中。
2) 不管你信不信,它来了:你将要使用的所有 classes 都必须在第一次实例化时加载。我称之为静态 class 分配 ;)
实现该目标的方法:
在扩展 MaxObject 或其调用的任何其他构造函数的 class 的构造函数中为每个 class 创建一个新实例。这包括 class 只有静态方法的 es。
如果您碰巧使用接口并动态创建这些接口的实现 (new Runnable() {...}),请不要这样做。动态实现是新的 classes.
有趣的事实:您也可以覆盖 classes 的方法。去吧
class Runner {
public void run() { throw new Exception("not implemented"); }
}
然后你可以动态创建一个
new Runner() {
public void run() {
MaxObject.post("Even Mr. Gosling says interfaces were a mistake!");
}
}
不信?我不怪你。看着 https://github.com/mihop/mxj-wsserver 和 http://www.maxforlive.com/library/device/3809 待转换。