Weblogic 10.3.1.0正在使用com.bea.core.apache.commons.net_1.0.0.0_1-4-1.jar ...我想从我的代码中使用commons-net-2.0.jar.
如何强制它仅在我的代码中使用较新的JAR?
我需要在当前类路径中为我编写的用于运行java文件的ant脚本添加一个文件夹.怎么做到呢?
我有以下自定义程序集:
<assembly>
<id>full</id>
<formats>
<format>jar</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<fileSets>
<fileSet>
<directory>${project.build.outputDirectory}</directory>
<outputDirectory>/</outputDirectory>
</fileSet>
</fileSets>
</assembly>
Run Code Online (Sandbox Code Playgroud)
以下配置部分:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptors>
<descriptor>src/main/assembly/assembly.xml</descriptor>
</descriptors>
<archive>
<manifest>
<mainClass>com.example.MyExample</mainClass>
<addClasspath>true</addClasspath>
<classpathPrefix>./lib/</classpathPrefix>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)
根据有关maven程序集插件的文档,这应该将一个类路径项添加到清单文件中,但它不起作用.如果我使用已弃用的程序集目标而不是单个目标,它确实有效.
我注意到有人提到存档部分只有jar格式,但这就是我正在使用的.
当他们弃用程序集:汇编时,他们是否定义了一种正确执行此操作的新方法?我真的不喜欢使用已弃用的功能,但如果它们破坏了工作方式并且没有正确记录它,我真的不知道如何避免这种情况.
有没有人有任何正确的例子?
在审查了蚂蚁文档之后,尚不清楚这些<path> 与<classpath>任务之间的差异.
有任何功能差异吗?它们基本上可以互换吗?
任何输入将不胜感激,谢谢.
我正在使用 :
PathMatchingResourcePatternResolver rr = new ...;
rr.getResources("classpath*:**/*.class")
Run Code Online (Sandbox Code Playgroud)
从目录和jar组成的类路径中获取所有类.该调用仅返回目录中的类; JAR文件被忽略.以下调用从JAR返回类:
rr.getResources("classpath*:org/**/*.class")
Run Code Online (Sandbox Code Playgroud)
是否可以在不知道基本包名的情况下获取所有类?
我想使用Eclipse类路径变量来解析我的类路径中的库的附加源JAR文件.这是我目前在Elcipse(Indigo)中的".classpath"文件的内容:
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry exported="true" kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry exported="true" kind="lib" path="lib/ApacheCommons/commons-logging.jar"/>
<classpathentry exported="true" kind="lib" path="lib/Spring-WS/spring-ws-1.5.8-all.jar"/>
<!-- [other entries] -->
<classpathentry kind="output" path="bin"/>
</classpath>
Run Code Online (Sandbox Code Playgroud)
当我现在为"spring-ws-1.5.8-all.jar"添加源JAR文件时,".classpath"文件内容为:
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry exported="true" kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry exported="true" kind="lib" path="lib/ApacheCommons/commons-logging.jar"/>
<classpathentry exported="true" kind="lib" path="lib/Spring-WS/spring-ws-1.5.8-all.jar"
sourcepath="D:/dev/sources/spring-ws-1.5.8-sources.jar"/>
<!-- [other entries] -->
<classpathentry kind="output" path="bin"/>
</classpath>
Run Code Online (Sandbox Code Playgroud)
如您所见,Eclipse使用绝对路径将"sourcepath"属性添加到"classpathentry"元素.
现在我的想法是用类路径变量"SOURCE_PATH"替换绝对路径,该变量被正确设置为"D:/ dev/sources".
(请不要问为什么我们有这个设置或建议我们必须更改它;它是一个旧项目,遗憾的是我们不能/允许更改构建结构).
我试过了
sourcepath="SOURCE_PATH/spring-ws-1.5.8-sources.jar"
Run Code Online (Sandbox Code Playgroud)
以及
sourcepath="${SOURCE_PATH}/spring-ws-1.5.8-sources.jar"
Run Code Online (Sandbox Code Playgroud)
但这两种变体都不起作用.
我似乎,我要么使用错误的语法,要么我不理解类路径变量的概念.也许classpath变量不能用于"sourcepath"属性?
非常感谢你的帮助!
我尝试使用中的Class-Path元素构建JAR MANIFEST.MF.我从外部源(我的情况下是Maven)获取类路径的元素.由于路径是绝对的并且超出了我的控制范围,因此它们可以包含奇怪的字符,如空格.
由于空格用于分隔类路径中的项目,因此该路径不起作用:
Class-Path: C:\User\Some Odd Name\project\target\project-1.0.0.jar
Run Code Online (Sandbox Code Playgroud)
如何在JAR Manifest中的类路径项中转义/编码奇数字符/空格?
例如,stream.read()假设com.google包存在于某个JAR(例如,Guava )中,此代码段会在该行上抛出NullPointerException(!).
ClassLoader classLoader = getClass().getClassLoader();
URL resource = classLoader.getResource("com/google");
InputStream stream = resource.openStream();
System.out.println(stream.toString()); // Fine -- stream is not null
stream.read(); // NPE inside FilterInputStream.read()!
Run Code Online (Sandbox Code Playgroud)
如果com/google与文件系统中的包而不是JAR交换,则代码段根本不会崩溃.事实上,它似乎读取该目录中的文件,由换行符分隔,但我无法想象在任何地方都指定了行为.
如果资源路径"com/google"指向"普通"资源文件或目录,是否有方法测试?
我写了我的第一个ArchUnit测试:
import static com.tngtech.archunit.library.dependencies.SlicesRuleDefinition.*;
// more non-static imports
@RunWith(ArchUnitRunner.class)
@AnalyzeClasses(packages = "my.domain.project")
public class PackageStructureTests {
@ArchTest public static final ArchRule NO_CYCLES = slices().matching("my.domain.project.(**)")
.namingSlices("package:$1").should().beFreeOfCycles();
}
Run Code Online (Sandbox Code Playgroud)
问题是它还分析了测试中的类,这些类不遵循那个简单的依赖约束.
如何将测试限制为"生产"类?
该项目使用Maven构建,因此这些类位于不同的目录中.
将名称以"Tests"结尾的类分开是不够的,因为有许多类不是测试,但只存在于测试类路径中.
我们的项目是使用Eclipse OSGi开发的,但也提供了通过jardesc文件导出的普通JAR .该项目使用ASM库和javaagent来invokevirtual与invokedynamic调用交换.
这在Java 7和8中运行良好.现在,我们升级到Java 9并移植我们的实现以供使用jdk.dynalink.
java --version`
java 9.0.4
Java(TM) SE Runtime Environment (build 9.0.4+11)
Java HotSpot(TM) 64-Bit Server VM (build 9.0.4+11, mixed mode)
Run Code Online (Sandbox Code Playgroud)
出口部分
OTRE_MIN:最小运行时和元对象协议部分.OTRE_DYN:动态编织代码(ASM)和运行时的其余部分.OTRE_AGEND:javaagent.目前,OTRE_MIN还包括OTRE_DYN.所以一切都放入了bootclasspath.
我用以下代码启动程序
JVM_ARGS="-d64 -Xms1024m -Xmx4048m -ea"
MODULES="--add-reads jdk.dynalink=ALL-UNNAMED --add-reads java.base=ALL-UNNAMED"
${JAVA_HOME}bin/java $MODULES \
-Xbootclasspath/a:${OTRE_MIN} -javaagent:$OTREDYN_AGENT $JVM_ARGS \
-jar ...
Run Code Online (Sandbox Code Playgroud)
但是,似乎 jdk.dynalink在bootclasspath上不再可见包.
java.lang.NoClassDefFoundError: jdk/dynalink/linker/GuardingDynamicLinker
at org.eclipse.objectteams.otredyn.runtime.dynamic.CallinBootstrap.<clinit>(CallinBootstrap.java:19)
at org.eclipse.objectteams.otredyn.bytecode.asm.CreateCallAllBindingsCallInOrgMethod.<clinit>(CreateCallAllBindingsCallInOrgMethod.java:115)
at org.eclipse.objectteams.otredyn.bytecode.asm.AsmWritableBoundClass.createCallAllBindingsCallInOrgMethod(AsmWritableBoundClass.java:300)
at org.eclipse.objectteams.otredyn.bytecode.AbstractBoundClass.weaveBindingInImplementedMethod(AbstractBoundClass.java:1180)
at org.eclipse.objectteams.otredyn.bytecode.AbstractBoundClass.handleTaskList(AbstractBoundClass.java:741) …Run Code Online (Sandbox Code Playgroud)