好的,我找到了一个解决方案,并将在这里为其他有相同问题的人描述它。希望这能帮上什么忙。
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-webapp</artifactId>
<version>8.1.17.v20150415</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-plus</artifactId>
<version>8.1.16.v20140903</version>
</dependency>
<build>
<plugins>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<id>classes-copy</id>
<phase>prepare-package</phase>
<configuration>
<tasks>
<move
todir="${project.build.directory}/${project.artifactId}-${project.version}/">
<fileset dir="${project.build.directory}/classes/">
<include name="**/warLauncher/**" />
<include name="log4j.xml" />
</fileset>
</move>
</tasks>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.3</version>
<executions>
<execution>
<id>jetty-classpath</id>
<phase>prepare-package</phase>
<goals>
<goal>unpack-dependencies</goal>
</goals>
<configuration>
<includeGroupIds>org.eclipse.jetty,javax.servlet,org.slf4j,log4j,org.log4j</includeGroupIds>
<outputDirectory>${project.build.directory}/${project.artifactId}-${project.version}</outputDirectory>
<excludes>**\/ECLIPSEF.*</excludes>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.6</version>
<configuration>
<warName>${project.artifactId}-${project.version}</warName>
<warSourceDirectory>src\main\webapp\WEB-INF</warSourceDirectory>
<webXml>src\main\webapp\WEB-INF\web.xml</webXml>
<archive>
<manifest>
<mainClass>your.package.warLauncher.WarLauncher</mainClass>
<addClasspath>true</addClasspath>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>default-war</id>
<phase>package</phase>
<goals>
<goal>war</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
战车
package your.package.warLauncher;
import org.eclipse.jetty.server.Connector;
import org.eclipse.jetty.server.Handler;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.bio.SocketConnector;
import org.eclipse.jetty.server.handler.ContextHandlerCollection;
import org.eclipse.jetty.server.handler.HandlerCollection;
public class WarLauncher{
public static void main(String[] args) throws Exception {
JettyServerContext context = new JettyServerContext();
Server server = new Server();
// Create connector
SocketConnector connector = new SocketConnector();
connector.setMaxIdleTime(1000 * 60 * 60);
connector.setSoLingerTime(-1);
connector.setPort(8080);
// Create handler collection
ContextHandlerCollection contextHandlerCollection = new ContextHandlerCollection();
HandlerCollection handlerCollection = new HandlerCollection();
handlerCollection.setHandlers(new Handler[] { contextHandlerCollection });
// Add webapp context
context.setServer(server);
contextHandlerCollection.addHandler(context);
server.setConnectors(new Connector[] { connector });
server.setHandler(handlerCollection);
server.start();
}
}
JettyServerContext
package your.package.warLauncher;
import java.net.URL;
import java.security.ProtectionDomain;
import org.eclipse.jetty.webapp.WebAppContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class JettyServerContext extends WebAppContext {
private static Logger logger = LoggerFactory.getLogger(JettyServerContext.class);
protected static final String[] JETTY_PLUS_CONFIGURATION_CLASSES;
static {
JETTY_PLUS_CONFIGURATION_CLASSES = new String[7];
JETTY_PLUS_CONFIGURATION_CLASSES[0] = "org.eclipse.jetty.webapp.WebInfConfiguration";
JETTY_PLUS_CONFIGURATION_CLASSES[1] = "org.eclipse.jetty.webapp.WebXmlConfiguration";
JETTY_PLUS_CONFIGURATION_CLASSES[2] = "org.eclipse.jetty.webapp.MetaInfConfiguration";
JETTY_PLUS_CONFIGURATION_CLASSES[3] = "org.eclipse.jetty.webapp.FragmentConfiguration";
JETTY_PLUS_CONFIGURATION_CLASSES[4] = "org.eclipse.jetty.plus.webapp.EnvConfiguration";
JETTY_PLUS_CONFIGURATION_CLASSES[5] = "org.eclipse.jetty.plus.webapp.PlusConfiguration";
JETTY_PLUS_CONFIGURATION_CLASSES[6] = "org.eclipse.jetty.webapp.JettyWebXmlConfiguration";
}
public JettyServerContext() {
setConfigurationClasses(JETTY_PLUS_CONFIGURATION_CLASSES);
setContextPath("/");
setWar(getWarLocation());
}
/**
* Returns the location of the war (a trick, which is necessary for executable
* wars please see: <a target="_blank" href=
* "http://uguptablog.blogspot.de/2012/09/embedded-jetty-executable-war-with.html"
* >Embedded Jetty with executable WAR</a>).
*
* @return The war location.
*/
protected String getWarLocation() {
ProtectionDomain protectionDomain = JettyServerContext.class.getProtectionDomain();
URL location = protectionDomain.getCodeSource().getLocation();
return location.toExternalForm();
}
}
我在一个使用openrdf的项目中,我需要shade插件来转换我的服务条目。我想同时建立一个战争和一个罐子,因为这两种用法都是可能的。但是,我不能让shade插件同时生成带阴影的jar和带阴影的WAR-Shade只在属性中定义的包类型上调用,并且将jar插件绑定到包阶段以便在war旁边创建一个jar,结果会产生一个无阴影的jar。我怎样才能同时创建一个有阴影的罐子和一个有阴影的战争呢?
我正在尝试使用shade插件创建一个可执行JAR的简单示例。我逐行浏览了这里的示例,在我的机器上似乎根本没有执行shade插件。 我的阴影POM代码是: 运行“mvn包”后,创建的JAR不包含任何项目依赖项。从调试跟踪来看,似乎从未调用过shade插件。要让shade发挥其魔力,是否还需要一些额外的步骤? 编辑:示例的完整代码位于https://github.com/hutch31/maven-s
问题内容: 使用Maven 3.1 Eclipse Helios Aspekt: 尝试使用maven-jar / dependency-plugins创建可运行的jar文件。 问题: 创建jar文件和依赖项后,当我尝试使用命令启动jar文件时出现NoCLassDefFoundErrors 但是类/文件可以在./dependency-jars文件夹中找到???我还尝试了以下命令: 这也不起作用。 题
我正在使用maven shade插件创建一个胖罐子,其中也包括一些弹性城堡罐子。但这造成了问题,因为Bouncy Castle的未签名版本。
我正试着做一个包含所有项目的胖uber罐子。如果我做了“MVN包”,我得到一个uber jar下的“blah”项目标签文件夹。(blah项目有主类。)uber jar包含所有项目(作为文件夹而不是jar),但当我运行它时,它似乎无法识别feature1和feature2项目。 我在上面添加了feature1和feature2的依赖项,以便它们在uber jar文件中。这错了吗?附注。blahmes
我一直在使用<code>mvn tomcat7 maven-plugin:run-am-pl:foo</code>成功地在Tomcat中一次只运行一个项目,如下图所示。现在我想让多个模块在同一端口但不同的上下文下运行。例如,我希望: 这是我一直在使用的pom.xml片段的一个例子: 使用插件是否可以做到这一点?我正在努力寻找正确的语法来让它发挥良好的作用。当我运行命令来运行它时,它只运行它在项目层